本人在编写用定时器控制单片机中断20次的实验中,发现无法进入第二次中断,进入第一次中断后就一直在while循环,也清除了标志位,麻烦大神帮看一下5415.timers.c
Susan Yang:
我会在测试后给您回复
user6387523:
回复 Susan Yang:
谢谢!这是整个工程文件timers.zip
Susan Yang:
回复 user6387523:
另外在您的代码中使用的是timer0B(Timer0IntHandler),但是在startup_ccs.c中,
Timer0IntHandler,// Timer 0 subtimer AIntDefaultHandler,// Timer 0 subtimer B您需要改为
IntDefaultHandler,// Timer 0 subtimer ATimer0IntHandler,// Timer 0 subtimer B
user6387523:
回复 Susan Yang:
感谢你的回复,现在我还有几个问题,请您再帮我看一下
1.我在编译的过程中无法使用Timer0BIntHandler这个函数,只能使用Timer0IntHandler,如果使用就会出现
Error[Pe020]: identifier "Timer0BIntHandler" is undefined C:\ti\TivaWare_C_Series-2.0.1.11577\examples\boards\dk-tm4c129x\timers\timers.c 126 之前是Timer0IntHandle也无法使用,我在timer.h文件中定义了一下就可以用了,但只能定义成这样void Timer0IntHandler(void)如果定义成void Timer0BIntHandler(void)就依旧无法使用
2.你在文章下面的提醒我看了,在之前自己调试的时候就已经把subtimer改过了不过是在startup_ewarm.c中工程文件里不包含startup_ccs.c
3.最后调试运行的时候输出为什么是999,如果按照程序的话应该是依次输出中断编号num1num2num3。。。这样的,会不会是中断时间太短的缘故
谢谢!!
Susan Yang:
回复 user6387523:
1 这个是因为您没有定义Timer0BIntHandler,您需要在startup_ccs.c内 extern void Timer0BIntHandler(void);
2 这个可能是123和129之间工程的区别,我回头看一下
3 显示如下UARTprintf("Number of interrupts: %d\r", g_ui32Counter);
就应该显示Number of interrupts: 999
g_ui32Counter 是uint32类型的数据,总共设定中断次数是1000,即 0-999,所以最后会显示999
user6387523:
回复 Susan Yang:
谢谢!Timer0BIntHandler的定义问题已经解决了我通过修改ewarm里文件的定义,ewarm和ccs文件内容上都是一样的,可能是编译器不同的问题,我用的是iar编译器。
不过修改过后我的程序还是停留在Number of interrupts : 1这里
另外不应该是每中断一次printf一次吗就像图片里这样,我的文件就是根据这个教程编写的,也不知哪里出错了,第二次中断还是进不去
user6387523:
回复 Susan Yang:
你好,方便的话能您能把测试的整个工程文件发给我吗,IAR版的最好,谢谢!!
user6387523:
回复 Susan Yang:
好的,谢谢,我前面一个问题还望回复一下~