"); //-->
又是这样,先忙一个晚上,没有结果,但在第二天很快就把事情搞定了。终于啊,定时器的定时方法弄完了,但在RAM中运行的方法还没弄明白。
下面是源码,有注释,我就不说废话了。但自己觉得重点有:
1、 时钟的设置。
2、 定时器的设置。
3、 中断的用法,主要是中断向量的赋值方法。要看看启动代码,弄明白了那个对以后的学习肯定是大有好处的。
注:不改动的话是用了中断,把中断禁止,再把注释掉的恢复就是查询的用法了。
#include "def.h"
#include "2440addr.h"
U32 j;
void __irq ISR_timer4(void)
{
rSRCPND |= 0x00004000;
rINTPND |= 0x00004000;
rGPBDAT = 0x01f<<j++;
if (j>9)
j = 5;
}
void Main(void)
{
U32 i;
j = 5;
//init clock
rCLKCON = 0x02110; //enable clk for timer,pwm and port
rUPLLCON = 0x00038022; //UPLL = 96Mhz
rMPLLCON = 0x00078012; //MPLL = 256Mhz
rCLKDIVN = 0X0b; //HCLK = FCLK/2 = 128Mhz
//PCLK = HCLK/2 = 64Mhz
//UCLK = UPLL/2 = 48Mhz
//flag of start
rGPBCON = 0x155555; //PORTB5-8 for output
rGPBUP = 0x03ff; //PORTB5-8 pull_up disable
rGPBDAT = 0x80;
for(i=0;i<500000;i++)
;
rGPBDAT = 0x01e0;
for(i=0;i<500000;i++)
;
//init timer4
pISR_TIMER4 = (unsigned)ISR_timer4;
rINTMSK ^= 0x00004000; //intmask_timer4 = 1;
rTCFG0 = 0x0000C700; //pre_CLK = PCLK/200 = 320Khz
rTCFG1 = 0x00030000; //MUX_CLK = pre_CLK/16 = 20Khz
rTCNTB4 = 20000; //f_INT_timer4 = MUX_CLK/20000 = 1hz
rTCON = 0x00200000;//timer4:EN_UPDATE
rTCON = 0x00500000;//timer4 start,DIS_UPDATE
for (;;)
{
/*
if (rSRCPND & 0x00004000)
{
rSRCPND |= 0x00004000;
rGPBDAT = 0x0ef<<j++;
if (j>9)
j = 5;
}
*/
}
}
*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。