请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:MSP430F5529 Howdy、
我使用的是与 I2C 和 SPI 类似的专有通信协议、但与无法使用 CCS 库的位置足够不同、因此我尝试使用 MSP430来实现它。 目前、我有 P1.4使用 TA0.3输出时钟信号(500kHz PWM)、我想使用 GPIO 发送数据。
我的最终目标是使用 Timer0 A0中断、以便位在 PWM 的每个上升沿或高电平状态移出。 作为测试、每次调用中断时我只想翻转该位、但 GPIO 以37.7kHz 左右的频率进行切换、比预期慢得多。 我可以运行通信的最小值为100kHz。 中断真的很慢、还是代码中缺少一些基本内容?
#include
void PWMinit (void);
int main (void)
{
unsigned int I;
WDTCTL = WDTPW + WDTHOLD; //停止 WDT
PWMinit ();
dataformation ();
__bis_SR_register (GIE); //在
(1)
{
}
void PWMinit (void){时启用中断
P1DIR |= BIT6; // P1.6中断调试
P1DIR |= BIT4; //P1.4输出
P1SEL |= BIT4; //P1.4至 TA0.3
TA0CCR0 = 1; // PWM 频率= 1MHz/(TA0CCR0+1)= 500kHz
TA0CCTL3 = OUTMOD_7; // CCR3复位/置位
TA0CCR3 = 1; // CCR3 PWM 占空比 Ton =(TB0CCR1)/1MHz
TA0CCTL0 = CCIE; //启用 CCR0中断
TA0CTL = tassel_SMCLK | MC_UP | TACLR;// SMCLK、UP 模式、Clear TAR
}
// Timer0 A0中断服务例程
#if defined (__TI_Compiler_version__)|| defined (__IAR_systems_ICC__)
#elima vector=TIMER0_A0中断服务例程#if defined (__TI_COMPION_ERR_A0
)#TIMER0_NOT_VERSIMPLE_TRIBRATION_TRIBU_TRIBU_TRIBU_TRIBU_TRIBU_ER0_TRU_TRU_ERA0 (#TI_TRU_ER0_TRU_TRU_TRU_INTRU_INTRU_INTRU_INTRU_ER_ER
#endif
{
P1OUT ^= BIT6; //切换 P1.0
}