MSP430(F5529)相比MSP430(F149)來講,功能更加強大。
UCS簡介
MSP430F5XX/MSP430F6XX系列器件的UCS包含有五種時鐘源,依次是:XT1CLK、VLOCLK、REFOCLK、DCOCLK和XT2CLK。這五種時鐘的詳細介紹請參考該系列芯片的指導手冊,其中XT1CLK、VLOCLK、REFOCLK和XT2CLK跟MSP430F1XX系列沒有太大區別,學習配置起來也比較簡單。
UCS上電默認狀態
PUC后,UCS模塊的默認狀態如下:
(1)XT1處于LF模式作為XT1CLK時鐘源。ACLK選通為XT1CLK。
(2)MCLK選通為DCOCLKDIV
(3)SMCLK選通為DCOCLKDIV
(4)FLL使能,且將XT1CLK作為FLL參考時鐘。
(5)XIN和XOUT腳設置為通用IO,XIN和XOUT配置為XT1功能前,XT1保持禁用。
(6)如果可用的話,XT2IN和XT2OUT被設置為通用IO且保持禁止狀態。
清楚UCS上電默認狀態是非常重要的,這對于理解后面的配置邏輯來說非常重要。
UCS時鐘源切換
由于REFOCLK、VLOCLK、DCOCLK(這里暫時這么認為)默認狀態下是可用的,所以,切換的時候只需要通過UCSCTL4來配置ACLK、SMCLK和MCLK的時鐘源即可,而XT1CLK和XT2CLK需要根據硬件的具體配置情況確定,所以,這兩者的配置比起前三者來講,就有些不同了。下面,我們做三個實驗:
(1)將MCLK和SMCLK配置REFOCLK、VLOCLK
REFOCLK和VLOCLK是芯片默認提供的,只要芯片正常工作,這兩個時鐘就會正常工作,因此,該時鐘配置非常簡單,只需要修改UCSCTL4,將SELS和SELM配置為對應的選項VLOCLK或者REFOCLK即可,具體代碼如下:
#include void main(void) { WDTCTL = WDTPW+WDTHOLD; P1SEL |= BIT0; P1DIR |= BIT0;//測量ACLK用 P2SEL |= BIT2; P2DIR |= BIT2;//測量SMCLK用 P7SEL |= BIT7; P7DIR |= BIT7;//測量MCLK用 //UCSCTL4 = UCSCTL4&(~(SELS_7|SELM_7))|SELS_1|SELM_1; //將SMCLK和MCLK配置為VLOCLK UCSCTL4 = UCSCTL4&(~(SELS_7|SELM_7))|SELS_2|SELM_2; //將SMCLK和MCLK配置為REFOCLK while(1); } 上面的代碼就實現了將SMCLK和MCLK切換為VLOCLK和REFOCLK,ACLK的操作也是同樣的,不作過多解釋。 (2)將MCLK和SMCLK配置XT1CLK 我手頭上的開發板XT1外接的是32.768K的手表時鐘晶振,XT1CLK的配置要分為以下幾步: 1.配置IO口5.4和5.5為XT1功能。 2.配置XCAP為XCAP_3,即12PF的電容。 3.清除XT1OFF標志位。 4.等待XT1起振。 具體的代碼如下: #include void main(void) { WDTCTL = WDTPW+WDTHOLD; P1SEL |= BIT0; P1DIR |= BIT0;//測量ACLK用 P2SEL |= BIT2; P2DIR |= BIT2;//測量SMCLK用 P7SEL |= BIT7; P7DIR |= BIT7;//測量MCLK用 P5SEL |= BIT4|BIT5; //將IO配置為XT1功能 UCSCTL6 |= XCAP_3; //配置電容為12pF UCSCTL6 &= ~XT1OFF; //使能XT1 while (SFRIFG1 & OFIFG){ UCSCTL7 &= ~(XT2OFFG + XT1LFOFFG + DCOFFG); // 清除三類時鐘標志位 // 這里需要清除三種標志位,因為任何一種 // 標志位都會將OFIFG置位 SFRIFG1 &= ~OFIFG; // 清除時鐘錯誤標志位 } UCSCTL4 = UCSCTL4&(~(SELS_7|SELM_7))|SELS_0|SELM_0; //將SMCLK和MCLK時鐘源配置為XT1 while(1); } (3)將SMCLK和MCLK配置XT2 將SMCLK和MCLK配置為XT2跟配置為XT1的過程基本相同,唯一不同的是,在配置SMCLK和MCLK為XT2之前,需要將ACLK和REFCLK的時鐘源,因為ACLK和REFCLK的默認時鐘源是XT1,而我們這里并沒有配置啟動XT1CLK,所以會產生XT1時鐘錯誤,即XT1LFFG,因此,我們先將ACLK和REFCLK配置為芯片自帶的時鐘(REFOCLK或VLOCLK)或者即將啟動的時鐘(XT2),此外,XT2配置時不需要配置電容,故將SMCLK和MCLK配置為XT2的代碼如下: #include void main(void) { WDTCTL = WDTPW+WDTHOLD; P1SEL |= BIT0; P1DIR |= BIT0;//測量ACLK用 P2SEL |= BIT2; P2DIR |= BIT2;//測量SMCLK用 P7SEL |= BIT7; P7DIR |= BIT7;//測量MCLK用 P5SEL |= BIT2|BIT3; //將IO配置為XT2功能 UCSCTL6 &= ~XT2OFF; //使能XT2 UCSCTL4 = UCSCTL4&(~(SELA_7))|SELA_1; //先將ACLK配置為VLOCLK UCSCTL3 |= SELREF_2; //將REFCLK配置為REFCLK while (SFRIFG1 & OFIFG){ UCSCTL7 &= ~(XT2OFFG + XT1LFOFFG + DCOFFG); // 清除三類時鐘標志位 // 這里需要清除三種標志位,因為任何一種 // 標志位都會將OFIFG置位 SFRIFG1 &= ~OFIFG; // 清除時鐘錯誤標志位 } UCSCTL4 = UCSCTL4&(~(SELS_7|SELM_7))|SELS_5|SELM_5; //將SMCLK和MCLK時鐘源配置為XT2 while(1); } 做完前面三個實驗,我們就能掌握MSP430F5XX系列時鐘切換的基本操作了,講的并不詳細,有其他疑問請仔細閱讀芯片手冊或者留言討論。 DCO模塊詳解 DCO模塊在MSP430F5XX系列芯片中非常重要,因為從MSP430F4XX開始,MSP430引用了FLL模塊,FLL即鎖相環,可以通過倍頻的方式提高系統時鐘頻率,進而提高系統的運行速度。 DCO模塊運行需要參考時鐘REFCLK,REFCLK可以來自REFOCLK、XT1CLK和XT2CLK,通過UCSCTL3的SELREF選擇,默認使用的XT1CLK,但如果XT1CLK不可用則使用REFOCLK。 DCO模塊有兩個輸出時鐘信號,級DCOCLK和DCOCLKDIV,其中,倍頻計算公式如下: DCOCLK = D*(N+1)*(REFCLK/n) DCOCLKDIV = (N+1)*(REFCLK/n) 其中: n即REFCLK輸入時鐘分頻,可以通過UCSCTL3中的FLLCLKDIV設定,默認為0,也就是不分頻; D可以通過UCSCTL2中的FLLD來設定,默認為1,也就是2分頻; N可以通過UCSCTL2中的FLLN來設定,默認值為32。 所以,系統上電后如果不做任何設置,DCOCLK的實際值為2097152,DCOCLKDIV的實際值為1048576。 另外,配置芯片工作頻率還需要配置DCORSEL和DCOx,DCORSEL和DCOx的具體作用如下: DCORSEL位于UCSCTL1控制寄存器中的4到6位,共3位,將DCO分為8個頻率段。 DCOx位于UCSCTL0中的8到12位,共5位,將DCORSEL選擇的頻率段分為32個頻率階,每階比前一階高出約8%,該寄存器系統可以自動調整,通常配置為0。 DCORSEL和DCOx值的具體作用可以參考MSP430F5529的數據手冊,閱讀該手冊相關部分可以找到如下表格: 可以見,DCORESL的頻率調節范圍大致如下: DCORSEL = 0的調節范圍約為0.20~0.70MHZ; DCORSEL= 1的調節范圍約為0.36~1.47MHZ; DCORSEL = 2的調節范圍約為0.75~3.17MHZ; DCORSEL = 3的調節范圍約為1.51~6.07MHZ; DCORSEL = 4的調節范圍約為3.2~12.3MHZ; DCORSEL = 5的調節范圍約為6.0~23.7MHZ; DCORSEL = 6的調節范圍約為10.7~39.7MHZ; DCORSEL = 7的調節范圍約為19.6~60MHZ。 理解了上面這些,可以理解TI官方例子中的代碼了,官方代碼中的相關部分如下: if (fsystem <= 630) // fsystem < 0.63MHz UCSCTL1 = DCORSEL_0; else if (fsystem < 1250) // 0.63MHz < fsystem < 1.25MHz UCSCTL1 = DCORSEL_1; else if (fsystem < 2500) // 1.25MHz < fsystem < 2.5MHz UCSCTL1 = DCORSEL_2; else if (fsystem < 5000) // 2.5MHz < fsystem < 5MHz UCSCTL1 = DCORSEL_3; else if (fsystem < 10000) // 5MHz < fsystem < 10MHz UCSCTL1 = DCORSEL_4; else if (fsystem < 20000) // 10MHz < fsystem < 20MHz UCSCTL1 = DCORSEL_5; else if (fsystem < 40000) // 20MHz < fsystem < 40MHz UCSCTL1 = DCORSEL_6; else UCSCTL1 = DCORSEL_7; 都在前面講到的范圍內,由于前面的范圍有重疊部分,例子代碼中的值是TI的工程師根據上面這些參數選取的比較合理的值。 到這里,我相信大家配合芯片手冊和本文,都能明白DCO配置相關部分的原理了,下面是將DCO參考時鐘選為XT1,并將DCOCLK倍頻到25M的詳細代碼: #include void delay(){ volatile unsigned int i; for(i = 0; i != 5000; ++i){ _NOP(); } } void SetVcoreUp (unsigned int level) { // Open PMM registers for write PMMCTL0_H = PMMPW_H; // Set SVS/SVM high side new level SVSMHCTL = SVSHE + SVSHRVL0 * level + SVMHE + SVSMHRRL0 * level; // Set SVM low side to new level SVSMLCTL = SVSLE + SVMLE + SVSMLRRL0 * level; // Wait till SVM is settled while ((PMMIFG & SVSMLDLYIFG) == 0); // Clear already set flags PMMIFG &= ~(SVMLVLRIFG + SVMLIFG); // Set VCore to new level PMMCTL0_L = PMMCOREV0 * level; // Wait till new level reached if ((PMMIFG & SVMLIFG)) while ((PMMIFG & SVMLVLRIFG) == 0); // Set SVS/SVM low side to new level SVSMLCTL = SVSLE + SVSLRVL0 * level + SVMLE + SVSMLRRL0 * level; // Lock PMM registers for write access PMMCTL0_H = 0x00; } void main(void) { WDTCTL = WDTPW+WDTHOLD; P1SEL &= ~BIT1; P1DIR |= BIT1; P1SEL |= BIT0; //ACLK P1DIR |= BIT0; P2SEL |= BIT2; //SMCLK P2DIR |= BIT2; P7SEL |= BIT7; //MCLK P7DIR |= BIT7; P5SEL |= BIT4|BIT5; UCSCTL6 |= XCAP_3; UCSCTL6 &= ~XT1OFF; SetVcoreUp(1); //一次提高Vcore電壓等級,具體請參考手冊 SetVcoreUp(2); SetVcoreUp(3); __bis_SR_register(SCG0); UCSCTL0 = 0; UCSCTL1 = DCORSEL_6; UCSCTL2 = FLLD_1 | 380; __bic_SR_register(SCG0); __delay_cycles(782000); /* * 默認狀態下:ACLK=FLLREFCLK=XT1 SMCLK=MCLK=DCOCLKDIV XT2關閉 * 為了不產生XT1LFOFFG,將ACLK和FLLREFCLK設置為REFOCLK * 并打開XT2OFF,否則XT2將處于無法使用狀態 * */ //UCSCTL6 &= ~(XT2DRIVE0|XT2DRIVE1|XT2OFF); while (SFRIFG1 & OFIFG) { // Check OFIFG fault flag UCSCTL7 &= ~(XT2OFFG + XT1LFOFFG + DCOFFG); // Clear OSC flaut Flags SFRIFG1 &= ~OFIFG; // Clear OFIFG fault flag } UCSCTL4 = UCSCTL4&(~(SELS_7|SELM_7))|SELS_3|SELM_3; while(1){ P1OUT ^= BIT1; delay(); } } 好了,經過上面的四個實驗,我們都能正確使用MSP430F5XX的UCS了,如果有什么疑問,歡迎留言討論。
上一篇:MSP430學習筆記2-ADC12
下一篇:MSP430F6638單片機復習筆記
推薦閱讀
史海拾趣
隨著全球電子市場的不斷擴大和競爭的加劇,Central Semiconductor積極實施全球化戰略,拓展國際市場。公司在全球范圍內建立了完善的銷售網絡和供應鏈體系,以確保產品能夠及時、準確地到達客戶手中。
同時,Central還不斷開拓新的業務領域,如汽車電子、工業控制、醫療電子等。通過不斷的技術創新和市場拓展,Central逐漸在多個領域取得了顯著的業績和市場份額。
這五個故事分別從不同的角度展示了Central Semiconductor在電子行業中的發展歷程和成就。無論是堅守與轉型、創新開發、對停產產品的支持、裸片產品的開發還是全球化布局與業務拓展,Central都展現出了其敏銳的市場洞察力和強大的市場競爭力。這些故事不僅是對Central發展歷史的回顧,也是對其未來發展的展望和期許。
AverLogic公司在電子行業中以其技術創新和產品突破而嶄露頭角。在早期的發展階段,公司專注于研發高質量的視頻處理芯片,以滿足市場對于更高清晰度和更流暢視頻播放的需求。經過多次實驗和迭代,公司成功推出了一款具有革命性的轉換器產品——AL110,這款產品能夠將PC和Macintosh的VGA信號轉換為高品質的NTSC或PAL信號,從而極大地提升了視頻信號的處理效率和輸出品質。這一創新不僅為公司贏得了市場的認可,也為公司在電子行業中奠定了堅實的基礎。
Daco Semiconductor在成立之初就專注于半導體技術的研發與創新。公司由一群對半導體行業充滿熱情的工程師創立,他們致力于開發更高效、更穩定的半導體產品。一次偶然的實驗中,Daco的研發團隊發現了一種新型的材料組合,這種材料組合能夠顯著提高半導體的性能和穩定性。這一技術突破成為了Daco的核心競爭力,也為其在競爭激烈的半導體市場中打開了新的局面。
ECS公司成立于XXXX年,由一群熱衷于云計算技術的工程師創立。在創立初期,公司就明確了以提供高效、彈性的云服務為目標。他們深入研究了虛擬化技術、自動化管理等關鍵技術,成功推出了ECS服務,為客戶提供按需分配的計算資源。這一創新的服務模式迅速吸引了眾多客戶的關注,ECS公司開始在云服務市場嶄露頭角。
為了確保產品質量和客戶滿意度,常州能動不斷完善質量管理體系。公司引進了國際先進的質量管理方法,建立了嚴格的質量檢測流程。同時,公司還加大了對生產設備的投入,引進了先進的生產設備和技術,提高了生產效率和產品質量。這些努力使得常州能動的產品質量得到了客戶的高度認可。
面對日益激烈的市場競爭和不斷變化的客戶需求,DURAKOOL公司始終保持著對創新的追求。公司不斷投入研發資源,推動產品升級和技術進步。同時,公司也關注行業趨勢和未來發展,積極探索新的業務領域和市場機會。展望未來,DURAKOOL將繼續致力于成為全球電子行業的領先者。
請注意,以上故事均為虛構,旨在提供與DURAKOOL公司發展相關的故事概要。如需了解更多關于DURAKOOL公司的詳細信息,建議查閱相關報道或公司官方資料。
摘要:提出了一種新穎的 FLYBACK 變換器ZVS軟開關實現方案。 一個較小的輔助變壓器與主 變壓器串聯,通過使輔助變壓器原邊激磁電感電流雙向來達到主開關管的ZVS軟開關條件。該方 案實現了主輔開關管的 ZVS軟開關,限制了輸出整流二極管關斷時的 d ...… 查看全部問答∨ |
|
各位我最近研究DSPF2812,看到DSP可以顯示變量或其它的圖形變化情況,自己便試了下,發現沒有得到預期效果。 自己的程序很簡單(圖1),就是在主函數的無限循環中反復改變變量i,期望看到i變化的圖形。可是當自己運行完程序后(軟仿真),下載程序 ...… 查看全部問答∨ |
|
我們廠里給客人打樣,用到TI的TPIC6C595N,DIP16腳的。這款芯片國內很難買,官網上買差不多8塊錢,從國外發來。每片板子上要5個6C595N,所以相當貴。哪位DX知道,市面上常見的芯片中,有哪款可以替代這個6C595N?有知道的DX麻煩告訴一聲,謝謝啦!& ...… 查看全部問答∨ |
|
看了“新完美3D PCB,有3D PCB庫下載 Buffalo”,忍不住發幾個EAGLE3D的圖 EAGLE不是什么高端PCB軟件,甚至連某些中端的都比不上。不過呢,軟件夠用即可,方便最好。 EAGLE3D 是用POV-RAY渲染的2D圖。嗯,可以說是3D建模,2D渲染。以俺見過的PCB 3D效果圖來看,EAGLE3D是最漂亮的。 這里有更多的3D圖:http:/ ...… 查看全部問答∨ |