查看: 3249|回复: 3

[其他] XEP100 XGATE

[复制链接]

该用户从未签到

11

主题

49

帖子

0

中级会员

Rank: 3Rank: 3

积分
215
最后登录
1970-1-1
发表于 2016-9-23 16:12:42 | 显示全部楼层 |阅读模式
小弟在xep100中使用Xgate 处理PIT0中断 和SCI0中断可行,但将PIT0中断放到S12中处理就死机,什么原因啊?
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 */
  ROUTE_INTERRUPT(SCI0_VEC, 0x81);
// ROUTE_INTERRUPT(PIT0_VEC, 0x81);
// ROUTE_INTERRUPT(RTI_VEC, 0x81);

  /* when changing your derivative to non-core3 one please remove next five lines */
  XGISPSEL= 1;
  XGISP31= (unsigned int)(void*__far)(XGATE_STACK_L + 1);
  XGISPSEL= 2;
  XGISP74= (unsigned int)(void*__far)(XGATE_STACK_H + 1);
  XGISPSEL= 0;

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

  /* force execution of software trigger 0 handler */
  XGSWT= 0x0101;
}



****************************************************/
void PIT_Init(void)
{
    PITCFLMT &= 0x7F;          //Disable PIT first
    PITMUX   |= 0x01;          //Ch0 use macro timer 1

    while (PITTF) PITTF=0x0F;  //clear all exist overflow flag

    PITMTLD1 = 160-1;          //Macro timer1 load = 200, output->BusClk/200 to 16bit-timer
    PITLD0   = 200-1;          //Channel0: BusClk/200/10000  1Hz @ 2M
                               //time-out period = (PITMTLD + 1) * (PITLD + 1) / fBUS
                               //                =   160*200/32M   =1ms
    PITINTE |=0x01;            //enable the PIT channel 0 interrupt   
    PITCE   |=0x01;            //enable the PIT channel 0
    PITCFLMT|=0x80;            //enable PIT   
}



#pragma CODE_SEG __NEAR_SEG NON_BANKED         //接收中断
interrupt void PTI_ISR(void){//1MS  


    if(timer_5ms > 4){   //实时中断
                           flag_5ms=1;
                          
                          timer_5ms=0;
                  }else
                    timer_5ms++;
            if(timer_10ms>9){   //实时中断
                           flag_10ms=1;
                          timer_10ms=0;
                  }else
                    timer_10ms++;
               
                  if(timer_20ms>19){
                            flag_20ms=1;
                            timer_20ms=0;
                  }else
                            timer_20ms++;

                  if(timer_50ms>49){
                            flag_50ms=1;
                     timer_50ms=0;                  
                  }else
                            timer_50ms++;
                            if(timer_100ms>99){
                            flag_100ms=1;
                     timer_100ms=0;                  
                  }else
                            timer_100ms++;
                 
                  if(timer_250ms>249){
                            flag_250ms=1;
                     timer_250ms=0;                  
                  }else
                            timer_250ms++;
                 
                 
            if(timer_500ms>499){
                            flag_500ms=1;
                  
                     timer_500ms=0;                  
                  }else
                            timer_500ms++;

    PITTF |= 0x01;               
         

}


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
  {ErrorHandler, 0x0F},  // Channel 0F - Reserved
  {ErrorHandler, 0x10},  // Channel 10 - Reserved
  {ErrorHandler, 0x11},  // Channel 11 - Reserved
  {ErrorHandler, 0x12},  // Channel 12 - Reserved
  {ErrorHandler, 0x13},  // Channel 13 - Reserved
  {ErrorHandler, 0x14},  // Channel 14 - Reserved
  {ErrorHandler, 0x15},  // Channel 15 - Reserved
  {ErrorHandler, 0x16},  // Channel 16 - Reserved
  {ErrorHandler, 0x17},  // Channel 17 - Reserved
  {ErrorHandler, 0x18},  // Channel 18 - Reserved
  {ErrorHandler, 0x19},  // Channel 19 - Reserved
  {ErrorHandler, 0x1A},  // Channel 1A - Reserved
  {ErrorHandler, 0x1B},  // Channel 1B - Reserved
  {ErrorHandler, 0x1C},  // Channel 1C - Reserved
  {ErrorHandler, 0x1D},  // Channel 1D - Reserved
  {ErrorHandler, 0x1E},  // Channel 1E - Reserved
  {ErrorHandler, 0x1F},  // Channel 1F - Reserved
  {ErrorHandler, 0x20},  // Channel 20 - Reserved
  {ErrorHandler, 0x21},  // Channel 21 - Reserved
  {ErrorHandler, 0x22},  // Channel 22 - Reserved
  {ErrorHandler, 0x23},  // Channel 23 - Reserved
  {ErrorHandler, 0x24},  // Channel 24 - Reserved
  {ErrorHandler, 0x25},  // Channel 25 - Reserved
  {ErrorHandler, 0x26},  // Channel 26 - Reserved
  {ErrorHandler, 0x27},  // Channel 27 - Reserved
  {ErrorHandler, 0x28},  // Channel 28 - Reserved
  {ErrorHandler, 0x29},  // Channel 29 - Reserved
  {ErrorHandler, 0x2A},  // Channel 2A - Reserved
  {ErrorHandler, 0x2B},  // Channel 2B - Reserved
  {ErrorHandler, 0x2C},  // Channel 2C - Reserved
  {ErrorHandler, 0x2D},  // Channel 2D - Reserved
  {ErrorHandler, 0x2E},  // Channel 2E - Reserved
  {ErrorHandler, 0x2F},  // Channel 2F - Reserved
  {ErrorHandler, 0x30},  // Channel 30 - XSRAM20K Access Violation
  {ErrorHandler, 0x31},  // Channel 31 - XGATE Software Error Interrupt     
  {ErrorHandler, 0x32},  // Channel 32 - XGATE Software Trigger 7           
  {ErrorHandler, 0x33},  // Channel 33 - XGATE Software Trigger 6           
  {ErrorHandler, 0x34},  // Channel 34 - XGATE Software Trigger 5           
  {ErrorHandler, 0x35},  // Channel 35 - XGATE Software Trigger 4           
  {ErrorHandler, 0x36},  // Channel 36 - XGATE Software Trigger 3           
  {ErrorHandler, 0x37},  // Channel 37 - XGATE Software Trigger 2           
  {ErrorHandler, 0x38},  // Channel 38 - XGATE Software Trigger 1  
  {ErrorHandler, 0x39},  // Channel 39 - XGATE Software Trigger 0         
// {(XGATE_Function)SoftwareTrigger0_Handler, (int)&MyData},  // Channel 39 - XGATE Software Trigger 0      
  {ErrorHandler, 0x3A},  // Channel 3A - Periodic Interrupt Timer           
  {ErrorHandler, 0x3B},  // Channel 3B - Periodic Interrupt Timer           
  {ErrorHandler, 0x3C},  // Channel 3C - Periodic Interrupt Timer  
  {ErrorHandler, 0x3D},  // Channel 3D - Periodic Interrupt Timer         
// {(XGATE_Function) PIT_ISR, 0x3D},  // Channel 3D - Periodic Interrupt Timer           
  {ErrorHandler, 0x3E},  // Channel 3E - Reserved                           
  {ErrorHandler, 0x3F},  // Channel 3F - Autonomous Periodical interrupt API
  {ErrorHandler, 0x40},  // Channel 40 - Low Voltage interrupt LVI
  {ErrorHandler, 0x41},  // Channel 41 - IIC1 Bus                 
  {ErrorHandler, 0x42},  // Channel 42 - SCI5                     
  {ErrorHandler, 0x43},  // Channel 43 - SCI4                     
  {ErrorHandler, 0x44},  // Channel 44 - SCI3                     
  {ErrorHandler, 0x45},  // Channel 45 - SCI2                     
  {ErrorHandler, 0x46},  // Channel 46 - PWM Emergency Shutdown   
  {ErrorHandler, 0x47},  // Channel 47 - Port P Interrupt         
  {ErrorHandler, 0x48},  // Channel 48 - CAN4 transmit            
  {ErrorHandler, 0x49},  // Channel 49 - CAN4 receive            
  {ErrorHandler, 0x4A},  // Channel 4A - CAN4 errors              
  {ErrorHandler, 0x4B},  // Channel 4B - CAN4 wake-up            
  {ErrorHandler, 0x4C},  // Channel 4C - CAN3 transmit            
  {ErrorHandler, 0x4D},  // Channel 4D - CAN3 receive            
  {ErrorHandler, 0x4E},  // Channel 4E - CAN3 errors              
  {ErrorHandler, 0x4F},  // Channel 4F - CAN3 wake-up            
  {ErrorHandler, 0x50},  // Channel 50 - CAN2 transmit
  {ErrorHandler, 0x51},  // Channel 51 - CAN2 receive
  {ErrorHandler, 0x52},  // Channel 52 - CAN2 errors  
  {ErrorHandler, 0x53},  // Channel 53 - CAN2 wake-up
  {ErrorHandler, 0x54},  // Channel 54 - CAN1 transmit
  {ErrorHandler, 0x55},  // Channel 55 - CAN1 receive
  {ErrorHandler, 0x56},  // Channel 56 - CAN1 errors  
  {ErrorHandler, 0x57},  // Channel 57 - CAN1 wake-up
  {ErrorHandler, 0x58},  // Channel 58 - CAN0 transmit
  {ErrorHandler, 0x59},  // Channel 59 - CAN0 receive
  {ErrorHandler, 0x5A},  // Channel 5A - CAN0 errors  
  {ErrorHandler, 0x5B},  // Channel 5B - CAN0 wake-up
  {ErrorHandler, 0x5C},  // Channel 5C - FLASH
  {ErrorHandler, 0x5D},  // Channel 5D - EEPROM
  {ErrorHandler, 0x5E},  // Channel 5E - SPI2  
  {ErrorHandler, 0x5F},  // Channel 5F - SPI1
  {ErrorHandler, 0x60},  // Channel 60 - IIC0 Bus                        
  {ErrorHandler, 0x61},  // Channel 61 - Reserved                        
  {ErrorHandler, 0x62},  // Channel 62 - CRG Self Clock Mode              
  {ErrorHandler, 0x63},  // Channel 63 - CRG PLL lock                     
  {ErrorHandler, 0x64},  // Channel 64 - Pulse Accumulator B Overflow     
  {ErrorHandler, 0x65},  // Channel 65 - Modulus Down Counter underflow   
  {ErrorHandler, 0x66},  // Channel 66 - Port H                           
  {ErrorHandler, 0x67},  // Channel 67 - Port J                           
  {ErrorHandler, 0x68},  // Channel 68 - ATD1                             
  {ErrorHandler, 0x69},  // Channel 69 - ATD0                             
  {ErrorHandler, 0x6A},  // Channel 6A - SCI1                             
  {(XGATE_Function)SCI0RX, 0x6B },  // Channel 6B - SCI0 (int) &SCI0Rec                             
  {ErrorHandler, 0x6C},  // Channel 6C - SPI0                             
  {ErrorHandler, 0x6D},  // Channel 6D - Pulse accumulator input edge     
  {ErrorHandler, 0x6E},  // Channel 6E - Pulse accumulator A overflow     
  {ErrorHandler, 0x6F},  // Channel 6F - Enhanced Capture Timer overflow  
  {ErrorHandler, 0x70},  // Channel 70 - Enhanced Capture Timer channel 7                                 
  {ErrorHandler, 0x71},  // Channel 71 - Enhanced Capture Timer channel 6
  {ErrorHandler, 0x72},  // Channel 72 - Enhanced Capture Timer channel 5
  {ErrorHandler, 0x73},  // Channel 73 - Enhanced Capture Timer channel 4
  {ErrorHandler, 0x74},  // Channel 74 - Enhanced Capture Timer channel 3
  {ErrorHandler, 0x75},  // Channel 75 - Enhanced Capture Timer channel 2
  {ErrorHandler, 0x76},  // Channel 76 - Enhanced Capture Timer channel 1
  {ErrorHandler, 0x77},  // Channel 77 - Enhanced Capture Timer channel 0
  {ErrorHandler, 0x78},
// {(XGATE_Function)RTI_ISR, 0x78},  // Channel 78 - Real Time Interrupt(XGATE_Function)RTI_ISR
  {ErrorHandler, 0x79},  // Channel 79 - IRQ
};


我知道答案 目前已有3人回答
回复

使用道具 举报

该用户从未签到

4

主题

49

帖子

0

注册会员

Rank: 2

积分
173
最后登录
2024-10-10
发表于 2016-9-29 15:34:06 | 显示全部楼层
你贴的这个函数 PTI_ISR  是xgate里面  还是s12里面
回复 支持 反对

使用道具 举报

该用户从未签到

4

主题

49

帖子

0

注册会员

Rank: 2

积分
173
最后登录
2024-10-10
发表于 2016-9-29 15:34:57 | 显示全部楼层
肯定是中断入口地址的问题   也就是说 中断发生了   程序找不到中断函数
回复 支持 反对

使用道具 举报

该用户从未签到

3

主题

23

帖子

0

注册会员

Rank: 2

积分
67
最后登录
1970-1-1
发表于 2016-10-4 20:37:33 | 显示全部楼层
几乎不用XGATE
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条

Archiver|手机版|小黑屋|恩智浦技术社区

GMT+8, 2025-10-28 19:46 , Processed in 0.096576 second(s), 24 queries , MemCache On.

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.

快速回复 返回顶部 返回列表