📄 main.c
字号:
/*=============================================================================
--------------------------------- Copy Left -----------------------------------
Illidan Fly's Project
Power by BigFly Network
http://bigfly.happybobby.com
Released under GPL2 License
----------------------------- File Description --------------------------------
Filename: main.c
Date: 2007.01.03
Version: 0.0.1
Description:
----------------------------- Version History ---------------------------------
0.0.1: First release
=============================================================================*/
#include "2410addr.h"
#include "target.h"
#include "2410lib.h"
void wait(void);
int fc1=0;
void __irq isr_eint0(void)
{
// 关闭该中断以防止中断处理过程中进入同一中断的嵌套,达到临界区域互斥的效果
// 但在少数情况下,可能需要允许同一中断嵌套,这时候就不必屏蔽该位了
// 有时候,可能还要操作子中断屏蔽寄存器 rINTSUBMSK,在以后 ADC 的例子里就会看到
rINTMSK = rINTMSK | (unsigned int)BIT_EINT0;
// 中断服务程序
// 清除中断位
// 清除中断控制器内相应的中断等待位(pending bit),使得中断控制器知道该中断已经被服务
// 有时候,中断等待位的清除是在中断被服务前,这个需要看具体中断需要
// 中断等待位寄存器的清除方法是:
// 把一个值写入该寄存器,如果该值的某1位为1,则中断等待位寄存器清除该位的等待位
// 即:以写1的方式去清0指定位,详细信息请参考数据手册
// 有时候,可能还要操作子中断等待位寄存器 rSUBSRCPND,在以后 ADC 的例子里就会看到
rINTPND = BIT_EINT0;
rSRCPND = BIT_EINT0;
// 重新打开中断
// 有时候,可能还要操作子中断屏蔽寄存器 rINTSUBMSK,在以后 ADC 的例子里就会看到
rINTMSK = rINTMSK & ~BIT_EINT0;
// 喂狗
rWTCNT = rWTDAT;
fc1=0;
wait();
//Uart_Printf("Times:%d Press any key in 10 seconds.\n",fc1++);
}
void __irq isr_wdt(void)
{
rINTMSK = rINTMSK | BIT_WDT;
Uart_Printf("You havn't press any key in 10 seconds.\n");
fc1=0;
// 清除中断位
rINTPND = BIT_WDT;
rSRCPND = BIT_WDT;
rINTMSK = rINTMSK & ~BIT_WDT;
}
void wait(void)
{
Uart_Printf("Times:%d Press any key in 10 seconds.\n",fc1++);
while(1)
{
;
}
}
void main(void)
{
char tmpchar;
Uart_Printf("CITK2410 WDT demo.\n");
// Init target board (call this function before anything can go!)
Target_Init();
// 初始化 WDT 控制器
// WDT 时钟频率计算方法:
// WDT时钟频率=(PCLK/(分频因子+1))/除数因子
// 在本例子里,PCLK=50.7MHz,要使 WDT 在10秒倒数完毕,则:
// 设置分频因子为49,除数因子为128,可得WDT时钟频率为7921.875
// 所以,WTDAT的初始值为7921.875*10=79219
rWTCON = (49<<8) | (0<<5) | (3<<3) | (1<<2) | (0);
rWTDAT = 79219;
rWTCNT = rWTDAT;
// 设置 WDT 中断服务程序
pISR_WDT = (unsigned int)isr_wdt;
// 打开 WDT 中断
rINTMSK = rINTMSK & ~BIT_WDT;
pISR_EINT0 = (unsigned int)isr_eint0;
// 打开中断
rINTMSK = rINTMSK & ~BIT_EINT0;
rEINTMASK=rEINTMASK &~(1<<11) &~(1<<19);
Uart_Printf("Select WDT Test method, Press:\n1 for WDT interrupt.\n2 for WDT reset.\n");
tmpchar = Uart_Getch();
if(tmpchar=='1')
{
rWTCON = (49<<8) | (1<<5) | (3<<3) | (1<<2) | (0);
}
else if(tmpchar=='2')
{
rWTCON = (49<<8) | (1<<5) | (3<<3) | (0<<2) | (1);
}
else
{
Uart_Printf("Invalid selection. System will now reset.\n");
rWTDAT = 1;
rWTCON = (0<<8) | (1<<5) | (0<<3) | (1<<2) | (1);
while(1){;}
}
wait();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -