工具/软件:Code Composer Studio
我希望每0.5ms 提出一次 WDT 中断。 我知道要设置间隔时间、我只需在 main 中添加一行、如下所示: WDTCTL = WDT_MDLY_32 这会将时间间隔设置为32ms。 没有这样的命令可将其设为0.5ms、因此我想知道如何实现这一点。 感谢您提前观看。
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
工具/软件:Code Composer Studio
我希望每0.5ms 提出一次 WDT 中断。 我知道要设置间隔时间、我只需在 main 中添加一行、如下所示: WDTCTL = WDT_MDLY_32 这会将时间间隔设置为32ms。 没有这样的命令可将其设为0.5ms、因此我想知道如何实现这一点。 感谢您提前观看。
WDT 不是通用计时器、但它确实为2个时钟提供了8倍分频器。
如果右键单击->转至定义,您将看到预定义 WDT 时间的设置。 需要注意的是 WDTIS 位、它引用了用户指南(SLAU208Q)表16-2、其中显示了可用的分频值。 预定义仅使用4个可用的分频值。
2^19约为524K、因此如果 SMCLK 以1MHz (可能是)运行、则 WDTSSEL=SMCLK 和 WDTIS=3应该为您提供0.524秒。
哦、谢谢、我现在看到了。 我想、我即将完成这项工作。 不过、出于某种原因、我的中断标志不会被抛出。
#include volatile unsigned int i = 0; int main (void) { WDTCTL = WDTPW | WDTSSEL_SMCLK | WDTIS__512;// WDT 间隔0.5ms _EINT(); //启用中断 SFRIE1 |= WDTIE; //启用 WDT 中断 P4DIR |= BIT7; // LED2到输出 P4OUT &=~BIT7; // LED2最初关闭 P2DIR &=~BIT1; //将 P2.1设置为输入(SW1) P2REN |= BIT1; //启用上拉电阻器 P2OUT |= BIT1; //正确的 IO 所需 P2IE |= BIT1; //在 P2.1上启用中断 P2IES |= BIT1; //为中断启用 hi->lo 边缘 P2IFG &=~BIT1; //清除任何错误的中断标志 volatile unsigned int i = 0; while (1)//在这里等待中断 { if (i >= 1000) { P2IFG |= BIT1; I = 0; } } #pragma vector = WDT_vector //WDT ISR __interrupt void watchdog_timer (void) { i++; } #pragma vector = port2_vector //SW1 ISR __interrupt void port2_ISR (void) { P2IFG &=~BIT1;//清除标志 P4OUT ^= BIT7;//切换 LED2 }