打印
[8/16-bit MCU]

MC9S12XEP100的XGATE

[复制链接]
1898|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
herohxb|  楼主 | 2015-11-5 11:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
小弟做一个简单的AD采样,主要在协处理器里完成,在主程序里面读取采样结果。如下,主程序中的配置:

#define ROUTE_INTERRUPT(vec_adr, cfdata)                \
  INT_CFADDR= (vec_adr) & 0xF0;                         \
  INT_CFDATA_ARR[((vec_adr) & 0x0F) >> 1]= (cfdata)
#define ATD0_VEC 0xd2
//#define SOFTWARETRIGGER0_VEC  0x72 /* vector address= 2 * channel id */

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(ATD0_VEC, 0x81); /* RQST=1 and PRIO=1 */

二、协处理器的设置
interrupt void ATD0_Thread(MyDataType* __restrict pData)
{
   AD_in0 = ATD0DR0;
   AD_in1 = ATD0DR1;
   DCPU = 0;
     ATD0CTL2_ASCIE = 0;
    asm SIF;
}

const XGATE_TableEntry XGATE_VectorTable[] = {..........
{(XGATE_Function)ATD0_Thread, 0x69},  //channel 69 - ATD0

........}

三、返回主函数main中,响应协处理器函数
/************************************************************/
/*              主处理器响应协处理器的中断函数              */
/************************************************************/
#pragma CODE_SEG __NEAR_SEG NON_BANKED
interrupt 22 void ATD0_handler(void)
{
  x = AD_in0;
  y = AD_in1;
  ATD0CTL2_ASCIE = 1;
}
#pragma CODE_SEG DEFAULT



以上是我的程序,仿真结果是每次只能采集一次数据,且进入不了主函数中响应协处理器的那个函数。

相关帖子

沙发
FSL_TICS_ZJJ| | 2015-11-5 14:19 | 只看该作者
非常感谢你的技术问题。非常抱歉中国没有16位单片机方面的技术专家。请您在飞思卡尔的英文论坛提交请求。网址是https://community.freescale.com/welcome 谢谢。

使用特权

评论回复
板凳
杨爱林林| | 2015-11-6 13:34 | 只看该作者
首先  协处理器 是专门用来处理中断的  
你xgate里面有中断   main里面也有中断   这不是瞎搞吗

其次   进入中断记得清标志位

使用特权

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

本版积分规则

1

主题

1

帖子

0

粉丝