微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 求高人指点协处理器!一运行程序就跑飞,真心求救.....

求高人指点协处理器!一运行程序就跑飞,真心求救.....

时间:10-02 整理:3721RD 点击:
一 main.c中的代码

/*---------------------------------------------------------*/
#include <hidef.h>      /* common defines and macros */
#include "derivative.h"      /* derivative-specific definitions */
#include "xgate.h"
#include "string.h"
#pragma DATA_SEG SHARED_DATA
volatile int shared_counter;
#pragma DATA_SEG DEFAULT
#define ROUTE_INTERRUPT(vec_adr, cfdata)   INT_CFADDR= (vec_adr) & 0xF0;   \
INT_CFDATA_ARR[((vec_adr) & 0x0F) >> 1]= (cfdata)


  
  
#define PTH_VEC 0xCC
static void SetupXGATE(void)
{
  XGVBR= (unsigned int)(void*__far)(XGATE_VectorTable - XGATE_VECTOR_OFFSET);  //设置中断地址
  
  ROUTE_INTERRUPT(PTH_VEC, 0x81);   //将中断交给协处理器,配置中断优先级 CodeWarrior中巧妙地定义了一个宏,方便用户对中断的配置                                                                       
                                     // 具体到本例:ROUTE_INTERRUPT(SCI0_VEC, 0x81); 实质上就是: step1:INT_CFADDR=0xD0; step2: INT_CFDATA_ARR[3]=0x81;
  /* enable XGATE mode and interrupts */
  XGMCTL= 0xFBC1; /* XGE | XGFRZ | XGIE */
  XGSWT= 0x0101;
}
#pragma CODE_SEG NON_BANKED
#define DCPU PORTK_PK4
#define DCPU_dir DDRK_DDRK4
   
#define LEDON DCPU=0
#define LEDOFF DCPU=1
#define BUS_CLOCK           32000000       //总线频率
#define QSC_CLOCK           16000000       //晶振频率
#define LED PORTB
#define LED_dir DDRB
#define UP_dir DDRH_DDRH0
/*************************************************************/
/*                      初始化锁相环                         */
/*************************************************************/
void INIT_PLL(void)
{
    CLKSEL &= 0x7f;       //set OSCCLK as sysclk
    PLLCTL &= 0x8F;       //Disable PLL circuit
    CRGINT &= 0xDF;
   
    #if(BUS_CLOCK == 40000000)
      SYNR = 0x44;
    #elif(BUS_CLOCK == 32000000)
      SYNR = 0x43;     
    #elif(BUS_CLOCK == 24000000)
      SYNR = 0x42;
    #endif
    REFDV = 0x81;         //PLLCLK=2×OSCCLK×(SYNR+1)/(REFDV+1)=64MHz ,fbus=32M
    PLLCTL =PLLCTL|0x70;  //Enable PLL circuit
    asm NOP;
    asm NOP;
    while(!(CRGFLG&0x08)); //PLLCLK is Locked already
    CLKSEL |= 0x80;        //set PLLCLK as sysclk
}
/*************************************************************/
/*                        延时函数                           */
/*************************************************************/
void delay(unsigned int n)
{
  unsigned int i,j;
  for(j=0;j<n;j++)
  for(i=0;i<40000;i++)
  ;
}
/*************************************************************/
/*                      初始化LED灯                          */
/*************************************************************/
void init_led(void)
{
  LED_dir=0xff;       //设置为输出
  
}
/*************************************************************/
/*                       初始化按键                          */
/*************************************************************/
void init_key(void)
{
     UP_dir =0;           //设置为输入
     
     PPSH = 0x0f;              //极性选择寄存器,选择下降沿;
     PIFH = 0x0f;                    //对PIFH的每一位写1来清除标志位;
     PIEH = 0x0f;              //中断使能寄存器;
}
/*************************************************************/
/*                           主函数                          */
/*************************************************************/
void main(void)
{
    DisableInterrupts;
    INIT_PLL();
    init_key();
    init_led();
    DCPU_dir=1;
    DCPU=0;
    EnableInterrupts;
    SetupXGATE();

    for(;;) {
      
         
           
         
    }      
}
/*************************************************************/
/*             主处理器响应协处理的中断的函数            */
/*************************************************************/
#pragma CODE_SEG __NEAR_SEG NON_BANKED
interrupt 25 void Port_H(void)
{
    XGIF1=0X0040;
    PIFH=0xFF;
    DCPU = ~DCPU;
   
}
#pragma CODE_SEG DEFAULT

二 xgate.cxgate中的代码

#include <hidef.h>      /* common defines and macros */
#include "xgate.h"
#include <mc9s12xet256.h>
#define UP PTIH_PTIH0
#define DOWN PTIH_PTIH1
#define LEFT PTIH_PTIH2
#define RIGHT PTIH_PTIH3
#define LED PORTB
#define LED_dir DDRB
unsigned char data=0x03;
interrupt void xgPHI(void)//H口中断服务程序(void)
{
    if(PIFH != 0)     //判断中断标志
   {
      PIFH = 0xff;     //清除中断标志
      if(UP == 0)         //按键1按下
      {
        LED = ~data;
      }
     
   }
   
  asm SIF;
   
}


interrupt void ErrorHandler(int dataptr) {
  int chanNum= dataptr;
  asm BRK;
}



#pragma CONST_SEG XGATE_VECTORS  /* assign the vector table in separate segment for dedicated placement in linker parameter file */
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, 0x3B},  // Channel 3B - Periodic Interrupt Timer      
  {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           
  {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   
  {(XGATE_Function)xgPHI, 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                             
  {ErrorHandler, 0x6B},  // Channel 6B - SCI0                             
  {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},  // Channel 78 - Real Time Interrupt
  {ErrorHandler, 0x79},  // Channel 79 - IRQ
};
这段程序要实现的就是双核运行成功,具体什么功能不是重点,求好心人告诉哪边出了问题或者需要查阅哪方面的资料都行!我用的是MC9S12XET256的板子感激不尽,谢谢!谢谢!谢谢!


程序跑飞不代表就是程序问题。静电方面、供电不稳定,晶振虚焊等都会引起。应该注意。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top