[原创]
[TI首届低功耗设计大赛]+寄存器版本串口测试
本试验是FR5969的简单的串口测试测试例程!
在这个试验中配置FR5969使用外部低频晶振,ACLK = 32768Hz, MCLK = SMCLK = BRCLK = default DCO = ~1MHz。 配置串口使用ACLK作为串口的时钟,波特率配置为9600,开启接收中断,调用USCI_A0.C中我写好的串口发送函数可以实现单字符和字符串的发送。使用串口调试工具发送任意字符可以改变LED0的状态。
每发送一次单字符和字符串后进入低功耗模式LPM0在接收中断中可以退出低功耗模式LPM0.
- //******************************************************************************
- // MSP430FR59xx Demo - eUSCI_A0 串口收发数据测试
- //
- // 描述: 在这个试验中配置FR5969使用外部低频晶振,
- // ACLK = 32768Hz, MCLK = SMCLK = BRCLK = default DCO = ~1MHz
- //
- //
- // MSP430FR5969
- // -----------------
- // | XIN|-
- // | | 32KHz Crystal
- // | XOUT|-
- // /|\| |
- // | | |
- // --|RTS P2.0/UCA0TXD|----|
- // | | |
- // | | |
- // | P2.1/UCA0RXD|----|
- // | |
- // | P1.0|---> LED
- //
- // IC爬虫 QQ:1394024051
- //
- // Oct 2014
- // Built with IAR Embedded Workbench V6.1
- //******************************************************************************
- #include <msp430.h>
- #include "USCI_A0.h"
-
- unsigned char RXData = 0;
- unsigned char TXData = 1;
-
-
- /*******************************************************************************
- *函数名 :int main
- *描述 :主函数
- *输入 :无
- *输出 :无
- *调用 :内部调用
- ******************************************************************************/
- int main(void)
- {
- WDTCTL = WDTPW | WDTHOLD; // 停止看门狗
-
- // Configure GPIO
- P1OUT &= ~BIT0; // P1.0输出低电平,熄灭LED0
- P1DIR |= BIT0; // P1.0配置为输出方向,作为LED0的控制关键,高电平点亮
-
- PJSEL0 |= BIT4 | BIT5; // Configure XT1 pins
-
- PM5CTL0 &= ~LOCKLPM5; // 关闭上电端口默认输出高阻抗的功能,使能上电保持起始设置
-
- UART_Init();
-
- // XT1 Setup
- CSCTL0_H = CSKEY >> 8; // Unlock CS registers
- CSCTL1 = DCOFSEL_0; // Set DCO to 1MHz
- CSCTL2 = SELA__LFXTCLK | SELS__DCOCLK | SELM__DCOCLK;
- CSCTL3 = DIVA__1 | DIVS__1 | DIVM__1; // Set all dividers
- CSCTL4 &= ~LFXTOFF; // Enable LFXT1
- do
- {
- CSCTL5 &= ~LFXTOFFG; // Clear XT1 fault flag
- SFRIFG1 &= ~OFIFG;
- }while (SFRIFG1&OFIFG); // Test oscillator fault flag
- CSCTL0_H = 0; // Lock CS registers
-
- while (1)
- {
- UartTX_Send_char('w'); //发送单个字符
- UartTX_Send_String("\n EE WORLD \n"); //发送字符串
- __bis_SR_register(LPM0_bits | GIE); // Enter LPM0, interrupts enabled
- }
- }
-
-
- #if defined(__TI_COMPILER_VERSION__) || defined(__IAR_SYSTEMS_ICC__)
- #pragma vector = USCI_A0_VECTOR // eUSCI ISR
- __interrupt void USCI_A0_ISR(void)
- #elif defined(__GNUC__)
- void __attribute__ ((interrupt(USCI_A0_VECTOR))) USCI_A0_ISR (void)
- #else
- #error Compiler not supported!
- #endif
- {
- UCA0IFG &= ~UCRXIFG; // Clear interrupt
- RXData = UCA0RXBUF; // Clear buffer
- if(RXData != TXData) // Check value
- {
- P1OUT ^= BIT0; // If incorrect turn on P1.0
- //while(1); // Trap CPU
- }
- TXData++; // Increment TX data
- __bic_SR_register_on_exit(CPUOFF); // Exit LPM0 on reti
- }
本帖最后由 IC爬虫 于 2014-10-31 13:39 编辑
暂无评论,赶紧抢沙发吧