【求助】 S12X 中断的问题 急求 在线等

[复制链接]
 楼主| 软海沉浮 发表于 2008-9-9 21:11 | 显示全部楼层 |阅读模式
最近开始使用带XGATE的芯片S12X,请问要用CPU响应的中断在哪里设置向量号等东西。<br /><br />S08&nbsp;和&nbsp;S12&nbsp;在.PRM文件中放向量号的方法已经不行了<br /><br />哪位高手能不吝赐教一下怎么设置中断服务程序,在下感激不尽
ssoftboy 发表于 2008-9-9 23:03 | 显示全部楼层

??

你问的是HCS12&nbsp;CORE的中断还是XGATE的中断?<br />实际上使用codewarrior新建一个工程,或者参考demo工程就可以了.<br />static&nbsp;void&nbsp;SetupXGATE(void)&nbsp;{<br />&nbsp;&nbsp;/*&nbsp;initialize&nbsp;the&nbsp;XGATE&nbsp;vector&nbsp;block&nbsp;and<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;set&nbsp;the&nbsp;XGVBR&nbsp;register&nbsp;to&nbsp;its&nbsp;start&nbsp;address&nbsp;*/<br />&nbsp;&nbsp;XGVBR=&nbsp;(unsigned&nbsp;int)(void*__far)(XGATE_VectorTable&nbsp;-&nbsp;XGATE_VECTOR_OFFSET);<br /><br />&nbsp;&nbsp;/*&nbsp;switch&nbsp;software&nbsp;trigger&nbsp;0&nbsp;interrupt&nbsp;to&nbsp;XGATE&nbsp;*/<br />&nbsp;&nbsp;ROUTE_INTERRUPT(SOFTWARETRIGGER0_VEC,&nbsp;0x81);&nbsp;/*&nbsp;RQST=1&nbsp;and&nbsp;PRIO=1&nbsp;*/<br /><br />&nbsp;&nbsp;/*&nbsp;enable&nbsp;XGATE&nbsp;mode&nbsp;and&nbsp;interrupts&nbsp;*/<br />&nbsp;&nbsp;XGMCTL=&nbsp;0xFBC1;&nbsp;/*&nbsp;XGE&nbsp;|&nbsp;XGFRZ&nbsp;|&nbsp;XGIE&nbsp;*/<br /><br />&nbsp;&nbsp;/*&nbsp;force&nbsp;execution&nbsp;of&nbsp;software&nbsp;trigger&nbsp;0&nbsp;handler&nbsp;*/<br />&nbsp;&nbsp;XGSWT=&nbsp;0x0101;<br />}<br />const&nbsp;XGATE_TableEntry&nbsp;XGATE_VectorTable[]&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;Channel&nbsp;#&nbsp;=&nbsp;Vector&nbsp;address&nbsp;/&nbsp;2<br />&nbsp;&nbsp;/*&nbsp;channel&nbsp;0..8&nbsp;are&nbsp;not&nbsp;used,&nbsp;first&nbsp;used&nbsp;must&nbsp;match&nbsp;macro&nbsp;XGATE_VECTOR_OFFSET&nbsp;in&nbsp;xgate.h&nbsp;*/<br />&nbsp;&nbsp;{ErrorHandler,&nbsp;0x09},&nbsp;&nbsp;//&nbsp;Channel&nbsp;09&nbsp;-&nbsp;Reserved<br />&nbsp;&nbsp;{ErrorHandler,&nbsp;0x0A},&nbsp;&nbsp;//&nbsp;Channel&nbsp;0A&nbsp;-&nbsp;Reserved<br />&nbsp;&nbsp;{ErrorHandler,&nbsp;0x0B},&nbsp;&nbsp;//&nbsp;Channel&nbsp;0B&nbsp;-&nbsp;Reserved<br />&nbsp;&nbsp;{ErrorHandler,&nbsp;0x0C},&nbsp;&nbsp;//&nbsp;Channel&nbsp;0C&nbsp;-&nbsp;Reserved<br />&nbsp;&nbsp;{ErrorHandler,&nbsp;0x0D},&nbsp;&nbsp;//&nbsp;Channel&nbsp;0D&nbsp;-&nbsp;Reserved<br />&nbsp;&nbsp;{ErrorHandler,&nbsp;0x0E},&nbsp;&nbsp;//&nbsp;Channel&nbsp;0E&nbsp;-&nbsp;Reserved<br />......<br />};
 楼主| 软海沉浮 发表于 2008-9-9 23:16 | 显示全部楼层

回楼上兄弟

S12X&nbsp;CPU中断,我不知道在哪里设置中断向量<br /><br />XGATE已经能用了
ssoftboy 发表于 2008-9-10 10:53 | 显示全部楼层

??

中断向量就存放在FLASH中。然后通过XGVBR寄存器配置一下就可以了。<br />为什么不看文档呢?
 楼主| 软海沉浮 发表于 2008-9-10 13:40 | 显示全部楼层

>>

谢谢你的帮助,我是第一次用这个芯片,很多地方都无从着手<br /><br />我是这样设置的,先在MAIN.C中初始化了中断,再把中断服务程序放在XGATE.CXGATE文件中,并且把程序名放在了const&nbsp;XGATE_TableEntry&nbsp;XGATE_VectorTable[]&nbsp;里面<br /><br />中断基本地址用的缺省植,您能不能帮我看看还需要在哪里添加什么东西<br />现在是用的XGATE中断,<br />错误提示是:目标&nbsp;CPU12PIT3ISR&nbsp;没有找到<br />也就是我的中断程序没找到<br /><br /><br /><br />文件:main.c中<br /><br />void&nbsp;SetupPIT(void)&nbsp;&nbsp;&nbsp;&nbsp;//初始化PIT<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;PITCE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;0x0C;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Channel&nbsp;enable&nbsp;register<br />&nbsp;&nbsp;&nbsp;&nbsp;PITMUX&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;0x0C;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;corresponding&nbsp;16bit&nbsp;timer&nbsp;with&nbsp;8bit&nbsp;microtimer<br />&nbsp;&nbsp;&nbsp;&nbsp;PITMTLD1&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;0x18;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Micro&nbsp;timer&nbsp;load&nbsp;register&nbsp;1&nbsp;(1&nbsp;us)<br />&nbsp;&nbsp;&nbsp;&nbsp;PITLD2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;0x4E20;&nbsp;&nbsp;&nbsp;//&nbsp;Load&nbsp;register&nbsp;2&nbsp;&nbsp;[micro&nbsp;timer&nbsp;1&nbsp;+&nbsp;trimer&nbsp;2&nbsp;=&nbsp;20&nbsp;ms&nbsp;(pri&nbsp;24&nbsp;MHz)]<br />&nbsp;&nbsp;&nbsp;&nbsp;PITLD3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;0x7530;&nbsp;&nbsp;&nbsp;//&nbsp;Load&nbsp;register&nbsp;3&nbsp;&nbsp;[micro&nbsp;timer&nbsp;1&nbsp;+&nbsp;trimer&nbsp;3&nbsp;=&nbsp;30&nbsp;ms&nbsp;(pri&nbsp;24&nbsp;MHz)]<br />&nbsp;&nbsp;&nbsp;&nbsp;PITCNT2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;0x0000;&nbsp;&nbsp;&nbsp;//&nbsp;Count&nbsp;register&nbsp;0<br />&nbsp;&nbsp;&nbsp;&nbsp;PITCNT3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;0x0000;&nbsp;&nbsp;&nbsp;//&nbsp;Count&nbsp;register&nbsp;0<br />&nbsp;&nbsp;&nbsp;&nbsp;PITCFLMT&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;0xE0;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;enable&nbsp;timer<br />}<br /><br /><br />void&nbsp;SetupInterrupt(void)&nbsp;&nbsp;//初始化中断<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;INT_CFADDR&nbsp;&nbsp;=&nbsp;0x70;<br />&nbsp;&nbsp;&nbsp;&nbsp;INT_CFDATA5&nbsp;=&nbsp;0x07;<br />&nbsp;&nbsp;&nbsp;&nbsp;INT_XGPRIO&nbsp;&nbsp;=&nbsp;0X07;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />}<br /><br /><br />void&nbsp;main(void)&nbsp;{<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;SetupXGATE();<br />&nbsp;&nbsp;&nbsp;&nbsp;SetupPIT();<br />&nbsp;&nbsp;&nbsp;&nbsp;....<br />}<br /><br /><br /><br />文件&nbsp;xgate.cxgate&nbsp;中<br /><br /><br /><br />interrupt&nbsp;void&nbsp;CPU12PIT3ISR(&nbsp;void&nbsp;)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;PITTF_PTF3&nbsp;=&nbsp;1;<br /><br />}<br /><br /><br />const&nbsp;XGATE_TableEntry&nbsp;XGATE_VectorTable[]&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;Channel&nbsp;#&nbsp;=&nbsp;Vector&nbsp;address&nbsp;/&nbsp;2<br />&nbsp;&nbsp;/*&nbsp;channel&nbsp;0..8&nbsp;are&nbsp;not&nbsp;used,&nbsp;first&nbsp;used&nbsp;must&nbsp;match&nbsp;macro&nbsp;XGATE_VECTOR_OFFSET&nbsp;in&nbsp;xgate.h&nbsp;*/<br />&nbsp;&nbsp;{ErrorHandler,&nbsp;0x09},&nbsp;&nbsp;//&nbsp;Channel&nbsp;09&nbsp;-&nbsp;Reserved<br />&nbsp;&nbsp;{ErrorHandler,&nbsp;0x0A},&nbsp;&nbsp;//&nbsp;Channel&nbsp;0A&nbsp;-&nbsp;Reserved<br />&nbsp;&nbsp;{ErrorHandler,&nbsp;0x0B},&nbsp;&nbsp;//&nbsp;Channel&nbsp;0B&nbsp;-&nbsp;Reserved<br />&nbsp;&nbsp;&nbsp;&nbsp;...............<br />&nbsp;&nbsp;{(XGATE_Function)CPU12PIT3ISR,&nbsp;0x3A},&nbsp;&nbsp;//&nbsp;Channel&nbsp;3A&nbsp;-&nbsp;Periodic&nbsp;Interrupt&nbsp;Timer&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />..............<br />}<br /><br /><br /><br /><br /><br /><br /><br /><br />
ssoftboy 发表于 2008-9-10 20:23 | 显示全部楼层

kkk

编译的问题<br /><br />/*&nbsp;XGATE&nbsp;vector&nbsp;table&nbsp;*/<br />typedef&nbsp;void&nbsp;(*_NEAR&nbsp;XGATE_Function)(int);<br /><br />你的函数没有传参数,应该写作:<br />interrupt&nbsp;void&nbsp;CPU12PIT3ISR(MyDataType*&nbsp;__restrict&nbsp;pData)&nbsp;{<br />//&nbsp;Add&nbsp;your&nbsp;code&nbsp;here<br />}<br />&nbsp;<br /><br /><br />
 楼主| 软海沉浮 发表于 2008-9-10 21:51 | 显示全部楼层

感谢

谢谢你,我明天去试试
 楼主| 软海沉浮 发表于 2008-9-11 10:02 | 显示全部楼层

.

ssoftboy&nbsp;兄弟实在是太感谢你了<br /><br />请问那个参数是做什么用的,能不能介绍两本S12X方面的书籍
ssoftboy 发表于 2008-9-11 10:07 | 显示全部楼层

.

不客气。那个是传入的参数。通常是一个全局变量。<br />S12X的书我一本也没有,市面上也似乎没什么深入讲XGate的书。大多是翻译一下datesheet而已。<br />我都是看手册以及一些appnotes和代码。
ssoftboy 发表于 2008-9-11 13:11 | 显示全部楼层

MSN

上班的时候只上MSN<br />jackchen06@gmail.com
 楼主| 软海沉浮 发表于 2008-9-11 16:44 | 显示全部楼层

晚上

我这只有两台公用机子可以上网<br /><br />这好不容易才等着机子,下班回去了加你
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

14

帖子

0

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

1

主题

14

帖子

0

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