- [cpp] view plaincopy
- //RTI实时中断实验
- //RTC模块包括一个状态和控制寄存器、一个8位计数寄存器和一个8位模数寄存器
- //实时中断功能用来产生周期性中断。RTI有三个可选时钟源:LPO 1KHZ内部振荡器,32KHZ内部时钟,以及ERCLK外部时钟
- //8位比较器实时比较计数器RTCCNT与TRCMOD值,相等则产生中断
-
-
-
- #include <hidef.h> /* for EnableInterrupts macro */
- #include "derivative.h" /* include peripheral declarations */
-
- #define LEDCPU PTDD_PTDD0
- #define LEDCPU_dir PTDDD_PTDDD0
-
-
-
-
-
- //初始化RTC
- void INIT_RTC(void)
- {
- RTCSC = 0X1B; //允许实时中断,RTCLKS = 00 实时时钟源为1KHZ低功率振荡器(LPO?
- //RTCPS = 1010(B)同时RTCLKS[0] = 0,即选择10分频
-
- RTCMOD = 50 - 1;//50个周期产生一次中断,中断频率为2Hz,0.5秒产生一次中断
- }
-
-
-
- //RTC中断函数
- void interrupt 25 RTC_INTERRUPT(void)
- {
- if(RTCSC_RTIF == 1)
- {
- RTCSC_RTIF = 1;//写入逻辑数1可以清除此位
- LEDCPU = ~LEDCPU;
-
- }
- }
-
-
- void main(void) {
-
- DisableInterrupts;
- SOPT1 = 0;
- EnableInterrupts;
-
-
- LEDCPU_dir = 1;
- LEDCPU = 0;
-
- INIT_RTC();
-
- while(1);
-
- }
|