打印

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

[复制链接]
4585|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
软海沉浮|  楼主 | 2008-9-9 21:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
ssoftboy| | 2008-9-9 23:03 | 只看该作者

??

你问的是HCS12 CORE的中断还是XGATE的中断?
实际上使用codewarrior新建一个工程,或者参考demo工程就可以了.
static void SetupXGATE(void) {
  /* initialize the XGATE vector block and
     set the XGVBR register to its start address */
  XGVBR= (unsigned int)(void*__far)(XGATE_VectorTable - XGATE_VECTOR_OFFSET);

  /* switch software trigger 0 interrupt to XGATE */
  ROUTE_INTERRUPT(SOFTWARETRIGGER0_VEC, 0x81); /* RQST=1 and PRIO=1 */

  /* enable XGATE mode and interrupts */
  XGMCTL= 0xFBC1; /* XGE | XGFRZ | XGIE */

  /* force execution of software trigger 0 handler */
  XGSWT= 0x0101;
}
const XGATE_TableEntry XGATE_VectorTable[] = {
                         // Channel # = Vector address / 2
  /* channel 0..8 are not used, first used must match macro XGATE_VECTOR_OFFSET in xgate.h */
  {ErrorHandler, 0x09},  // Channel 09 - Reserved
  {ErrorHandler, 0x0A},  // Channel 0A - Reserved
  {ErrorHandler, 0x0B},  // Channel 0B - Reserved
  {ErrorHandler, 0x0C},  // Channel 0C - Reserved
  {ErrorHandler, 0x0D},  // Channel 0D - Reserved
  {ErrorHandler, 0x0E},  // Channel 0E - Reserved
......
};

使用特权

评论回复
板凳
软海沉浮|  楼主 | 2008-9-9 23:16 | 只看该作者

回楼上兄弟

S12X CPU中断,我不知道在哪里设置中断向量

XGATE已经能用了

使用特权

评论回复
地板
ssoftboy| | 2008-9-10 10:53 | 只看该作者

??

中断向量就存放在FLASH中。然后通过XGVBR寄存器配置一下就可以了。
为什么不看文档呢?

使用特权

评论回复
5
软海沉浮|  楼主 | 2008-9-10 13:40 | 只看该作者

>>

谢谢你的帮助,我是第一次用这个芯片,很多地方都无从着手

我是这样设置的,先在MAIN.C中初始化了中断,再把中断服务程序放在XGATE.CXGATE文件中,并且把程序名放在了const XGATE_TableEntry XGATE_VectorTable[] 里面

中断基本地址用的缺省植,您能不能帮我看看还需要在哪里添加什么东西
现在是用的XGATE中断,
错误提示是:目标 CPU12PIT3ISR 没有找到
也就是我的中断程序没找到



文件:main.c中

void SetupPIT(void)    //初始化PIT
{
    PITCE       = 0x0C;     // Channel enable register
    PITMUX      = 0x0C;        // corresponding 16bit timer with 8bit microtimer
    PITMTLD1    = 0x18;     // Micro timer load register 1 (1 us)
    PITLD2      = 0x4E20;   // Load register 2  [micro timer 1 + trimer 2 = 20 ms (pri 24 MHz)]
    PITLD3      = 0x7530;   // Load register 3  [micro timer 1 + trimer 3 = 30 ms (pri 24 MHz)]
    PITCNT2     = 0x0000;   // Count register 0
    PITCNT3     = 0x0000;   // Count register 0
    PITCFLMT    = 0xE0;     // enable timer
}


void SetupInterrupt(void)  //初始化中断
{
    INT_CFADDR  = 0x70;
    INT_CFDATA5 = 0x07;
    INT_XGPRIO  = 0X07;
    
}


void main(void) {

    SetupXGATE();
    SetupPIT();
    ....
}



文件 xgate.cxgate 中



interrupt void CPU12PIT3ISR( void )
{
    PITTF_PTF3 = 1;

}


const XGATE_TableEntry XGATE_VectorTable[] = {
                         // Channel # = Vector address / 2
  /* channel 0..8 are not used, first used must match macro XGATE_VECTOR_OFFSET in xgate.h */
  {ErrorHandler, 0x09},  // Channel 09 - Reserved
  {ErrorHandler, 0x0A},  // Channel 0A - Reserved
  {ErrorHandler, 0x0B},  // Channel 0B - Reserved
    ...............
  {(XGATE_Function)CPU12PIT3ISR, 0x3A},  // Channel 3A - Periodic Interrupt Timer           
..............
}








使用特权

评论回复
6
ssoftboy| | 2008-9-10 20:23 | 只看该作者

kkk

编译的问题

/* XGATE vector table */
typedef void (*_NEAR XGATE_Function)(int);

你的函数没有传参数,应该写作:
interrupt void CPU12PIT3ISR(MyDataType* __restrict pData) {
// Add your code here
}
 


使用特权

评论回复
7
软海沉浮|  楼主 | 2008-9-10 21:51 | 只看该作者

感谢

谢谢你,我明天去试试

使用特权

评论回复
8
软海沉浮|  楼主 | 2008-9-11 10:02 | 只看该作者

.

ssoftboy 兄弟实在是太感谢你了

请问那个参数是做什么用的,能不能介绍两本S12X方面的书籍

使用特权

评论回复
9
ssoftboy| | 2008-9-11 10:07 | 只看该作者

.

不客气。那个是传入的参数。通常是一个全局变量。
S12X的书我一本也没有,市面上也似乎没什么深入讲XGate的书。大多是翻译一下datesheet而已。
我都是看手册以及一些appnotes和代码。

使用特权

评论回复
10
ssoftboy| | 2008-9-11 13:11 | 只看该作者

MSN

上班的时候只上MSN
jackchen06@gmail.com

使用特权

评论回复
11
软海沉浮|  楼主 | 2008-9-11 16:44 | 只看该作者

晚上

我这只有两台公用机子可以上网

这好不容易才等着机子,下班回去了加你

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

14

帖子

0

粉丝