主题中讨论的其他器件: MSP430FR2633
工具/软件:Code Composer Studio
您好!
我正在使用 MSP-EXP430FR2433。 在我的 launchboard 上、我有2个 LED (P1.0/RED 和 P1.1/Green)和2个开关(P2.3和 P2.7)。 我的项目是更改红色 LED 的闪烁速度。 如果我按下 P2.3开关、它将降低速度;如果按下 P2.7开关 、它将提高闪烁速度。 我知道这个部件。 但我不知道如何使用 UART 获取计时器的值、因此我可以在 PC 上看到它。 有人可以帮帮我吗?
谢谢
以下是我的代码:
#include
unsigned int aku1 = 0; // counter1
unsigned int aku2=0; // counter2
int 计数器= 0x1111;
#define SMCLK_115200 0
#define SMCLK_9600 1
#define UART_MODE SMCLK_115200//SMCLK_9600//
void initUART ()
{
//将 USCI_A0配置为 UART 模式
UCA0CTLW0 |= UCSWRST; //将 eUSCI 置于复位
#if UART_MODE = SMCLK_115200
UCA0CTLW0 |= UCSSEL_SMCLK; // CLK = SMCLK
//波特率设置
//使用表21-5
UCA0BRW = 8;
UCA0MCTLW |= UCOS16 | UCBRF_10 | 0xF700;//0xF700为 UCBRSx = 0xF7
#Elif UART_MODE = SMCLK_9600
UCA0CTLW0 |= UCSSEL_SMCLK; // CLK = SMCLK
//波特率设置
//使用表21-5
UCA0BRW = 104;
UCA0MCTLW |= UCOS16 | UCBRF_2 | 0xD600;//0xD600为 UCBRSx = 0xD6
#else
#错误"请将波特率指定为115200或9600 "
#endif
UCA0CTLW0 &=~UCSWRST; //初始化 eUSCI
UCA0IE |= UCTXIE + UCRXIE; //启用 USCI_A0 RX 中断
}
void initClockTo16MHz ()
{
//根据 MCLK 的器件数据表的要求配置一个 FRAM 等待状态
//在配置时钟系统之前在8MHz 以上运行。
FRCTL0 = FRCTLPW | NWAITS_1;
_bis_SR_register (SCG0);//禁用 FLL
CSCTL3 |= SELREF_REFOCLK;//将 REFO 设置为 FLL 基准源
CSCTL0 = 0; //清除 DCO 和 MOD 寄存器
CSCTL1 &=~(DCORSEL_7); //首先清除 DCO 频率选择位
CSCTL1 |= DCORSEL_5; //设置 DCO = 16MHz
CSCTL2 = FLLD_0 + 487; //设置为 fDCOCLKDIV =(FLLN + 1)*(fFLLREFCLK/n)
// =(487 + 1)*(32.768 kHz/1)
// = 16MHz
_DELAY_CYCLES (3);
_BIC_SR_register (SCG0); //启用 FLL
while (CSCTL7 &(FLLUNLOCK0 | FLLUNLOCK1)); // FLL 锁定
CSCTL4 = SELMS_DCOCLKDIV | SELA_REFOCLK;
}
void initGPIO ()
{
//配置 GPIO
P1DIR |= BIT0; // P1.0输出
P1OUT &=~BIT0; // P1.0 törlés
P1DIR |= BIT1; // P1.1输出
P1OUT &=~BIT1; // P1.1 törlés
P2REN |= BIT3; // felhúzóellenállás ó n engedlyeze é se
P2OUT |= BIT3; //为 P2.3选择上拉模式
P2IE |= BIT3; // P2.3中断输入
P2IES |= BIT3; // P2.3高/低边沿
P2IFG &=~BIT3; // P2.7 IFG törlése
P2REN |= BIT7; //启用内部上拉/下拉电阻器
P2OUT |= BIT7; //为 P2.7选择上拉模式
P2IE |= BIT7; // P2.7中断被启用
P2IES |= BIT7; // P2.7高/低边沿
P2IFG &=~BIT7; // P2.7 IFG törlése
}
int main (void)
{
WDTCTL = WDTPW | WDTHOLD; //停止 WDT
initGPIO();
initClockTo16MHz();
inituart();
//禁用 GPIO 上电默认高阻抗模式以激活
//先前配置的端口设置
PM5CTL0 &=~LOCKLPM5;
//TimerA0 konconfig
TA0CCTL0 |= CCIE; //启用 TACCR0中断
TA0CCR0 = 0x1111;
TA0CTL |= TASSEL_SMCLK | MC_1 | ID_8; // SMCLK、最高为相等模式
//TimerA1 konfig
TA1CCR0 = 0x5fff;
TA1CTL |= tassel_SMCLK | MC_1 | ID_8; // SMCLK、最高为相等模式
_bis_SR_register (LPM0_bits | GIE); // LPM3 (低功耗模式) s interruptk engedlyez
__no_operation(); // v é gtelen ciklus
}
//计时器 A0中断服务例程
#pragma vector = TIMER0_A0_vector
__interrupt void Timer_A (void)
{
P1OUT ^= BIT0; // P1.0 LED villogtatása
}
//计时器 A1中断服务例程
#pragma vector = Timer1_A0_vector //P1.1 LED visszajelző beállítása
_interrupt void Timer_B (void)
{
if (aku1 == aku2)
{
TA1CCTL0 &=~CCIE;
aku1=0;
}
其他
{
P1OUT ^= BIT1;
aku1++;
}
}
//端口2中断服务例程
#pragma vector=port2_vector
__interrupt void Port_2_7 (void)
{
IF (P2IFG 和 BIT3) //ha 一个 P2.3-as gomb 中断标志 aktív
{
if (TA0CCR0 = 0x0000) // a TimerA0 elte a minimumot
{
P2IFG &=~BIT3; // P2.3 IFG 环形
TA1CCTL0 |= CCIE; // TA1CCR0中断设计
TA1CCR0 = 0x8fff; // TimerA1 sebessg é nek megadása
TA0R = 0; // TimerA0计数器 nullázása
UCA0RXBUF=TA0CCR0;
aku2 = 4; // 2-t villan A visszajelző LED (P1.1)
}
其他
{
P2IFG &=~BIT3; // P2.3 IFG törlés
TA0CCR0 = TA0CCR0 - 0x1111; // TimerA0 é t é k é nek csökkentese è re
计数器=计数器- 0x1111;
TA0R = 0; // TimerA0计数器 nullázása
TA1CCTL0 |= CCIE; // TimerA1中断输入
TA1CCR0 = 0x5fff; // TimerA1 sebessg é nek megadása
UCA0RXBUF = TA0CCR0;
aku2 = 4; // 2-t villan A visszajelző LED (P1.1)
}
}
IF (P2IFG 和 BIT7) // ha a P2.7-as gomb interrupt flagje aktív
{
IF (TA0CCR0 == 0xFFFF) // a timerA0 elte a maximumot
{
P2IFG &=~BIT7; // P2.7 IFG 清零
TA1CCTL0 |= CCIE; // TimerA1中断设计
TA1CCR0 = 0x8fff; // TimerA1 sebessg é nek megadása
TA0R = 0; // TimerA0计数器 nullázása
UCA0RXBUF=TA0CCR0;
aku2 = 6; // 3-t villan A visszajelző LED (P1.1)
}
其他
{
P2IFG &=~BIT7; // P2.7 IFG 清零
TA0CCR0 = TA0CCR0 + 0x1111; // TimerA0 é t é k é nek növelése è re
计数器=计数器+ 0x1111;
TA0R = 0; // TimerA0计数器 nullázása
TA1CCTL0 |= CCIE; // TimerA1中断设计
TA1CCR0 = 0x5fff; // TimerA1 sebessg é nek megadása
UCA0RXBUF = TA0CCR0;
aku2 = 6; // 3-t villan A visszajelző LED (P1.1)
}
}
//*********
// UART 中断
//
#if defined (__TI_Compiler_version__)|| defined (__IAR_systems_icc_)
#pragma vector=USCI_A0_vector
__interrupt void USCI_A0_ISR (void)
#Elif defined (__GNU__)
void __attribute__(interrupt (USCI_A1_vector))#USCI_A0
Compiler #a0_aid!
#endif
{
switch (__even_in_range (UCA0IV、USCI_UART_UCTXCPTIFG))
}{
USCI_NONE 案例:中断;
USCI_UART_UCRXIFG 案例:
/* while (!(UCA0IFG&UCTXIFG));
UCA0TXBUF = UCA0RXBUF;
__no_operation();*/
中断;
USCI_UART_UCTXIFG 案例:
while (!(UCA0IFG&UCRXIFG));
UCA0RXBUF = UCA0TXBUF;
__no_operation();
中断;
案例 USCI_UART_UCSTTIFG:中断;
案例 USCI_UART_UCTXCPTIFG:break;
}
}