求助:关于AW60的PWM中断问题。进不了中断。

[复制链接]
3120|4
 楼主| mc9s08aw60 发表于 2007-1-30 16:37 | 显示全部楼层 |阅读模式
PWM, se, TI, ui, TE
/******************************************************************************<br />*<br />*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Copyright&nbsp;(C)&nbsp;2006&nbsp;Freescale&nbsp;Semiconductor,&nbsp;Inc.<br />*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;All&nbsp;Rights&nbsp;Reserved<br />*<br />*&nbsp;Filename:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DEMO9S08AW60_TEST.c<br />*&nbsp;Author:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Daniel&nbsp;Kruczek&nbsp;<br />*&nbsp;Revision:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3.0<br />*<br />*&nbsp;Description:&nbsp;&nbsp;&nbsp;&nbsp;Flashes&nbsp;LED_BAR7&nbsp;and&nbsp;LED_BAR0&nbsp;turns&nbsp;on&nbsp;and&nbsp;off&nbsp;according&nbsp;to<br />*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;the&nbsp;state&nbsp;of&nbsp;SW1.<br />*<br />*&nbsp;Notes:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Also&nbsp;serves&nbsp;as&nbsp;an&nbsp;example&nbsp;for&nbsp;the&nbsp;9S08AW60&nbsp;demo&nbsp;board.<br />*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Created&nbsp;using&nbsp;CodeWarrior&nbsp;5.0&nbsp;for&nbsp;HC(S)08.<br />******************************************************************************/<br />//&nbsp;===================================================================<br />//&nbsp;Macro&nbsp;Functions&nbsp;definitions<br />//&nbsp;===================================================================<br />//&nbsp;The&nbsp;setting&nbsp;in&nbsp;project&nbsp;preference&nbsp;must&nbsp;be&nbsp;checked<br />//&nbsp;char&nbsp;should&nbsp;be&nbsp;unsigned&nbsp;8&nbsp;bit<br /><br />typedef&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;char&nbsp;&nbsp;&nbsp;&nbsp;muint8;<br />typedef&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;short&nbsp;&nbsp;&nbsp;&nbsp;muint16;<br />typedef&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;long&nbsp;&nbsp;&nbsp;&nbsp;muint32;<br /><br />typedef&nbsp;&nbsp;&nbsp;&nbsp;char&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mint8;<br />typedef&nbsp;&nbsp;&nbsp;&nbsp;short&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mint16;<br />typedef&nbsp;&nbsp;&nbsp;&nbsp;long&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mint32;<br /><br />//&nbsp;To&nbsp;Clear&nbsp;or&nbsp;Set&nbsp;single&nbsp;bits&nbsp;in&nbsp;a&nbsp;byte&nbsp;variable.<br />#define&nbsp;&nbsp;&nbsp;&nbsp;b_SetBit(bit_ID,&nbsp;varID)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(varID&nbsp;|=&nbsp;(muint8)(1&lt&ltbit_ID))<br />#define&nbsp;&nbsp;&nbsp;&nbsp;b_ClearBit(bit_ID,&nbsp;varID)&nbsp;&nbsp;&nbsp;&nbsp;(varID&nbsp;&=&nbsp;~(muint8)(1&lt&ltbit_ID))<br />#define&nbsp;&nbsp;&nbsp;&nbsp;b_XorBit(bit_ID,&nbsp;varID)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(varID&nbsp;^=&nbsp;(muint8)(1&lt&ltbit_ID))<br /><br />//&nbsp;To&nbsp;Clear&nbsp;or&nbsp;Set&nbsp;single&nbsp;bits&nbsp;in&nbsp;a&nbsp;word(16-bit)&nbsp;variable.<br />#define&nbsp;&nbsp;&nbsp;&nbsp;w_SetBit(bit_ID,&nbsp;varID)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(varID&nbsp;|=&nbsp;(muint16)(1&lt&ltbit_ID))<br />#define&nbsp;&nbsp;&nbsp;&nbsp;w_ClearBit(bit_ID,&nbsp;varID)&nbsp;&nbsp;&nbsp;&nbsp;(varID&nbsp;&=&nbsp;~(muint16)(1&lt&ltbit_ID))<br />#define&nbsp;&nbsp;&nbsp;&nbsp;w_XorBit(bit_ID,&nbsp;varID)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(varID&nbsp;^=&nbsp;(muint16)(1&lt&ltbit_ID))<br /><br /><br />#include&nbsp;&lthidef.h&gt&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;EnableInterrupts&nbsp;macro&nbsp;&nbsp;*/<br />#include&nbsp;&quot;derivative.h&quot;&nbsp;/*&nbsp;include&nbsp;peripheral&nbsp;declarations&nbsp;*/<br /><br />muint8&nbsp;&nbsp;&nbsp;flag;<br />/*<br />//&nbsp;---------------------------------------------------------------------------<br />//&nbsp;Peripheral&nbsp;Initialization&nbsp;Routine<br />//&nbsp;---------------------------------------------------------------------------<br />*/<br />void&nbsp;PeriphInit(void)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;SOPT&nbsp;&nbsp;=&nbsp;0x00;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;Disable&nbsp;COP&nbsp;&nbsp;&nbsp;&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;PTCDD&nbsp;=&nbsp;0x10;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;PTCPE&nbsp;=&nbsp;0xEF;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;PTFDD&nbsp;=&nbsp;0xFF;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;PTFD&nbsp;&nbsp;=&nbsp;0x00;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;flag=1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />}<br /><br />/*****&nbsp;Init_TPM&nbsp;init&nbsp;code&nbsp;*****/<br />&nbsp;&nbsp;<br />void&nbsp;TPM_init(void)&nbsp;&nbsp;<br />{&nbsp;<br /><br />&nbsp;&nbsp;//TPM1SC&nbsp;=&nbsp;0x00;<br />&nbsp;&nbsp;TPM1SC&nbsp;=&nbsp;0x00;&nbsp;&nbsp;&nbsp;//TPM2SC&nbsp;&nbsp;<br />&nbsp;TPM1MOD&nbsp;=&nbsp;0x5FFF;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;TPM1C2V&nbsp;=&nbsp;0x0FF;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;(void)(TPM1C2SC&nbsp;==&nbsp;0);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><br />&nbsp;&nbsp;TPM1C2SC&nbsp;=&nbsp;0x68;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;TPM1C3V&nbsp;=&nbsp;0x0FFF;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;(void)(TPM1C3SC&nbsp;==&nbsp;0);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;//TPM1C2SC&nbsp;=&nbsp;0x28;<br />&nbsp;&nbsp;TPM1C3SC&nbsp;=&nbsp;0x28;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;(void)(TPM1SC&nbsp;==&nbsp;0);&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;TPM1SC&nbsp;=&nbsp;0x0F;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />}&nbsp;<br />&nbsp;<br />void&nbsp;main(void)&nbsp;{<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;PeriphInit();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;Microcontroller&nbsp;initialization&nbsp;*/&nbsp;<br />&nbsp;&nbsp;TPM_init();<br />&nbsp;&nbsp;EnableInterrupts;&nbsp;/*&nbsp;enable&nbsp;interrupts&nbsp;*/<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;//&nbsp;Begin&nbsp;LED/Switch&nbsp;test<br />&nbsp;&nbsp;for(;;)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(PTCD_PTCD2==0x01)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;b_ClearBit(2,PTFD);<br />&nbsp;&nbsp;&nbsp;&nbsp;else<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;b_SetBit(2,PTFD);<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;b_ClearBit(7,PTFD);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;b_ClearBit(6,PTFD);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;b_ClearBit(5,PTFD);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;/*&nbsp;loop&nbsp;forever&nbsp;*/&nbsp;<br />}/*&nbsp;end&nbsp;main(void)&nbsp;*/<br /><br />interrupt&nbsp;void&nbsp;PWMCH2_ISR(void)&nbsp;<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;TPM1C2SC_CH2IE=0X00;<br />&nbsp;&nbsp;&nbsp;&nbsp;TPM1C2SC&=0xEF;<br /><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;flag++;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(flag&lt=1)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;b_SetBit(7,PTFD);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;else&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;flag=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;b_ClearBit(7,PTFD);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TPM1C2SC_CH2IE=0X01;&nbsp;<br />}<br />
 楼主| mc9s08aw60 发表于 2007-1-30 16:40 | 显示全部楼层

TPM1通道2。。。请教各位看看中断程序对吗?

在PRM文件中我设置:<br />VECTOR&nbsp;7&nbsp;&nbsp;PWMCH2_ISR
JerryBJ 发表于 2007-1-30 17:11 | 显示全部楼层

是进不了中断还是进去了出不来?

我看是出不来。中断标志CHnF的清除方法是这样的:在CHnF=1时,首先读TPMxCnSC,然后向CHnF位写0。<br />所以进入中断后,应该这样来清除CHnF:<br />interrupt&nbsp;void&nbsp;PWMCH2_ISR(void)&nbsp;<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;char&nbsp;tmp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;tmp&nbsp;=&nbsp;TPM1C2SC;<br />&nbsp;&nbsp;&nbsp;&nbsp;TPM1C2SC&=0x7F;<br />//&nbsp;........<br /><br />否则,CHnF一直为logic&nbsp;1,退出中断后马上又进来了。
 楼主| mc9s08aw60 发表于 2007-1-30 17:15 | 显示全部楼层

谢谢。。。我试试。

  
 楼主| mc9s08aw60 发表于 2007-1-30 17:18 | 显示全部楼层

.........

谢谢斑竹,解决了。。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

12

主题

133

帖子

0

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