初学者碰到的44B0进不了中断

[复制链接]
2762|2
 楼主| 电子尘埃 发表于 2007-4-6 08:41 | 显示全部楼层 |阅读模式
/********************************************************************&nbsp;<br />功&nbsp;&nbsp;&nbsp;&nbsp;能:定时器初始化<br />说&nbsp;&nbsp;&nbsp;&nbsp;明:<br />入口参数<br />********************************************************************/<br />void&nbsp;Init_Time(void)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;rTCFG0=0x64;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//T0的预分频值为100<br />&nbsp;&nbsp;&nbsp;&nbsp;rTCFG1=0x04;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//T0分割比例为1/32,T1-T5均为1/2<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//定时器输入时钟频率=MCLK/预分频*分割比例<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;rTCNTB0=0xc8;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//(1/64MHZ/100/32)*200=10ms;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;/*------中断设置------*/<br />&nbsp;&nbsp;&nbsp;&nbsp;rINTCON&nbsp;=&nbsp;0x01;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//开启&quot;矢量中断模式&quot;与IRQ中断<br />&nbsp;&nbsp;&nbsp;&nbsp;rINTMOD&nbsp;=&nbsp;0x00;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//普通IRQ中断模式<br />&nbsp;&nbsp;&nbsp;&nbsp;rINTMSK=&nbsp;~(BIT_GLOBAL|BIT_TIMER0);&nbsp;&nbsp;&nbsp;&nbsp;//开启全局中断与TIMER0<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;pISR_TIMER0=(unsigned)Timer0Done;<br />&nbsp;&nbsp;&nbsp;&nbsp;rTCON&nbsp;=&nbsp;0x01;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//启动定时器<br />}<br /><br />/*------------------------------------------------------------------<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;定时中断服务程序<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />-------------------------------------------------------------------*/<br />void&nbsp;__irq&nbsp;Timer0Done(void)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;rI_ISPC=BIT_TIMER0;<br />&nbsp;&nbsp;&nbsp;&nbsp;Time_var++;<br />&nbsp;&nbsp;&nbsp;&nbsp;if(Time_var==100)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Time_var=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rPDATE=~rPDATE;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />}<br /><br />在下刚开始学ARM各路高手帮忙看看,为什么进不去呀??
 楼主| 电子尘埃 发表于 2007-4-6 09:30 | 显示全部楼层

找到了,是TCON寄存器高置的原因

  
 楼主| 电子尘埃 发表于 2007-4-6 10:49 | 显示全部楼层

传上更改后的定时中断初始化程序,让像我这样的菜鸟注意

/*******************************************<br /><br /><br />第一个自已写的ARM程序<br /><br /><br />*******************************************/<br />#include&nbsp;&quot;Target44blib.h&quot;<br />#include&nbsp;&quot;Target44b.h&quot;<br /><br /><br /><br />void&nbsp;Init_Time(void);<br />void&nbsp;delay(unsigned&nbsp;int);<br />void&nbsp;__irq&nbsp;Timer0Done(void);<br /><br />volatile&nbsp;unsigned&nbsp;int&nbsp;Time_var=0;<br /><br />/********************************************************************&nbsp;<br />功&nbsp;&nbsp;&nbsp;&nbsp;能:定时器初始化<br />说&nbsp;&nbsp;&nbsp;&nbsp;明:<br />入口参数<br />********************************************************************/<br />void&nbsp;Init_Time(void)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;/*------中断设置------*/<br />&nbsp;&nbsp;&nbsp;&nbsp;rINTCON&nbsp;=&nbsp;0x05;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//开启&quot;矢量中断模式&quot;与IRQ中断<br />&nbsp;&nbsp;&nbsp;&nbsp;rINTMOD&nbsp;=&nbsp;0x00;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//普通IRQ中断模式<br />&nbsp;&nbsp;&nbsp;&nbsp;rINTMSK=&nbsp;~(BIT_GLOBAL|BIT_TIMER0);&nbsp;&nbsp;&nbsp;&nbsp;//开启全局中断与TIMER0<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;pISR_TIMER0=(unsigned)Timer0Done;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;rTCFG0=0x64;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//T0的预分频值为100<br />&nbsp;&nbsp;&nbsp;&nbsp;rTCFG1=0x04;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//T0分割比例为1/32,T1-T5均为1/2<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//定时器输入时钟频率=MCLK/预分频*分割比例<br />&nbsp;&nbsp;&nbsp;&nbsp;rTCNTB0=0xc8;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//(1/64MHZ/100/32)*200=10ms;<br />&nbsp;&nbsp;&nbsp;&nbsp;rTCON=0x0a;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//设置对应定时器的手动更新位<br />&nbsp;&nbsp;&nbsp;&nbsp;rTCON&nbsp;=&nbsp;0x09;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//设置对应定时器的启动位来启动定时器0(同时清除手动更新位)<br /><br /><br />}<br /><br />/*------------------------------------------------------------------<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;定时中断服务程序<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />-------------------------------------------------------------------*/<br />void&nbsp;__irq&nbsp;Timer0Done(void)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;rI_ISPC=BIT_TIMER0;<br />&nbsp;&nbsp;&nbsp;&nbsp;Time_var++;<br />&nbsp;&nbsp;&nbsp;&nbsp;if(Time_var==100)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Time_var=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rPDATE=~rPDATE;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />}<br /><br />/********************************************************************&nbsp;<br />功&nbsp;&nbsp;&nbsp;&nbsp;能:延时<br />说&nbsp;&nbsp;&nbsp;&nbsp;明:<br />入口参数:unsigned&nbsp;char&nbsp;i<br />********************************************************************/<br />void&nbsp;delay(unsigned&nbsp;int&nbsp;i)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//延时<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;while(--i)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />/*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_nop_();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_nop_();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_nop_();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_nop_();<br />*/<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}&nbsp;<br />/*******************************************************************<br /><br />此处的Main仅为一个标号,也可使用其他名称,与C语言程序中的main()函数没<br />有关系<br /><br />*******************************************************************/<br /><br />void&nbsp;Main(void)<br />{<br />//&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;int&nbsp;i;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;Init_Time();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//定时器初始化<br />&nbsp;&nbsp;&nbsp;&nbsp;rPCONE=0x5500;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//PE4-7为输出<br />&nbsp;&nbsp;&nbsp;&nbsp;rPDATE=0xffffffff;<br />&nbsp;&nbsp;&nbsp;&nbsp;rPUPE=0xffffffff;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//所有PE端口禁止上拉<br />&nbsp;&nbsp;&nbsp;&nbsp;rPDATE=0xaaaaaaaa;<br />&nbsp;&nbsp;&nbsp;&nbsp;while(1)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//rPDATE=0x00000000;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//for(i=1000;i&gt0;i--)delay(1000);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//rPDATE=0xffffffff;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//for(i=1000;i&gt0;i--)delay(1000);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br /><br />
您需要登录后才可以回帖 登录 | 注册

本版积分规则

51

主题

442

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部