您的位置:首页 > 编程语言

测试代码高亮-CSDN默认皮肤

2015-04-01 11:56 369 查看
C++语言:
MSP430F5438A的SPI通信例程

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 }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: