測試程式碼高亮-CSDN預設皮膚

liujj05發表於2015-04-01
01 //===========================================================================//
02 //                                                                           //
03 // 檔案:  MAIN.C                                                            //
04 // 說明:  BW-DK5438開發板微控制器SPI埠實驗程式                              //
05 //         設定SPI埠工作模式,通過SPI埠傳送資料                          //
06 //         可在P3.1/P3.3埠觀察資料、時鐘波形                               //
07 // 編譯:  IAR Embedded Workbench IDE for MSP430 v4.21                       //
08 // 版本:  v1.1                                                              //
09 // 編寫:  JASON.ZHANG                                                       //
10 // 版權:  北京拓普博維電子技術有限公司                                      //
11 //                                                                           //
12 //===========================================================================//
13 
14 #include "msp430x54x.h"
15 #include <stdlib.h>
16 #include <stdio.h>
17 #include <string.h>
18 #include "PIN_DEF.H"
19 
20 #define  FLL_FACTOR     649                                 // FLL_FACTOR: DCO倍頻係數    
21 char  event, RXBuffer[2]                                  ;
22 
23 
24 //***************************************************************************//
25 //                                                                           //
26 //                 初始化主時鐘: MCLK = XT1×(FLL_FACTOR+1)                  //
27 //                                                                           //
28 //***************************************************************************//
29 void Init_CLK(void)
30 {
31   WDTCTL     = WDTPW + WDTHOLD                            ; // 關看門狗
32   P7SEL     |= 0x03                                       ; // 埠選擇外部低頻晶振XT1
33   UCSCTL6   &=~XT1OFF                                     ; // 使能外部晶振
34   UCSCTL6   |= XCAP_3                                     ; // 設定內部負載電容
35   UCSCTL3   |= SELREF_2                                   ; // DCOref = REFO
36   UCSCTL4   |= SELA_0                                     ; // ACLK   = XT1  
37   __bis_SR_register(SCG0)                                 ; // 關閉FLL控制迴路
38   UCSCTL0    = 0x0000                                     ; // 設定DCOx, MODx
39   UCSCTL1    = DCORSEL_7                                  ; // 設定DCO振盪範圍
40   UCSCTL2    = FLLD__1 + FLL_FACTOR                       ; // Fdco = ( FLL_FACTOR + 1)×FLLRef = (649 + 1) * 32768 = 21.2992MHz
41   __bic_SR_register(SCG0)                                 ; // 開啟FLL控制迴路                                                            
42   __delay_cycles(1024000)                                 ;
43   do
44   {
45     UCSCTL7 &= ~(XT2OFFG + XT1LFOFFG + XT1HFOFFG + DCOFFG); // 清除 XT2,XT1,DCO 錯誤標誌                                                            
46     SFRIFG1 &= ~OFIFG                                     ;
47   }while(SFRIFG1&OFIFG)                                   ; // 檢測振盪器錯誤標誌
48 }
49 
50 //***************************************************************************//
51 //                                                                           //
52 //  Init_Port(void): 設定IO埠                                              //
53 //                                                                           //
54 //***************************************************************************//
55 void Init_Port(void)
56 {
57   P5DIR  |= POWER                                         ; // 主電源
58   MAIN_POWER_ON                                           ;
59   P7DIR  |= LED_PWR                                       ; // 發光二極體電源
60   P7OUT  &=~LED_PWR                                       ;
61   INTERNAL_PULL_UP                                        ; // 使能鍵盤埠內部上拉電阻
62   ROW_IN_COL_OUT                                          ; // 設定行輸入,列輸出0
63 }
64 
65 //***************************************************************************//
66 //                                                                           //
67 //  Init_SPI(void): 設定SPI埠                                              //
68 //                                                                           //
69 //***************************************************************************//
70 void Init_SPI(void)
71 {  
72   P8OUT    |= LCD_NCS                                     ; // SPI埠複用,DisableTFT液晶埠
73   P8DIR    |= LCD_NCS                                     ;
74   P3OUT    |= NCS25                                       ;
75   P3DIR    |= NCS25                                       ;
76   P3SEL    &= 0xF0                                        ;
77   P3SEL    |= 0x0E                                        ; // // P3.1/2/3功能選擇為SPI
78   UCB0CTL1 |= UCSWRST                                     ; // 復位SPI狀態機
79   UCB0CTL0 |= UCMST+UCSYNC+UCCKPL+UCMSB                   ; // 3-pin, 8-bit SPI master, Clock polarity high, MSB
80   UCB0CTL1 |= UCSSEL_2                                    ; // 選擇SCK參考源為SMCLK
81   UCB0BR0   = 0x02                                        ; // SCK = SMCK/2
82   UCB0BR1   = 0                                           ;
83   UCB0CTL1 &=~UCSWRST                                     ; // SPI狀態機使能
84 }
85 
86 
87 void main( void )
88 {
89   WDTCTL = WDTPW + WDTHOLD                                ;
90   Init_CLK()                                              ;
91   Init_Port()                                             ;
92   Init_SPI()                                              ;
93   for(;;)
94   {
95      UCB0TXBUF = 0x55                                     ;
96      __delay_cycles(280)                                  ;
97   }
98 }

相關文章