/****************************主函数*******************************/
void main(void)
{
InitSysCtrl();//初始化系统控制:看门狗 锁相环 外设时钟使能
//InitGpio();//初始化通用GPIO
InitXintf();
InitXintf16Gpio(); //初始化外扩接口引脚
InitSciGpio();//初始化串口引脚
InitECanGpio();//初始化ECan引脚
InitECan();//初始化ECan
InitSci();//初始化串口
DINT;//禁止CPU中断
InitPieCtrl();//初始化PIE中断向量
IER = 0x0000;//禁止所有CPU中断
IFR = 0x0000;//清除中断标志位
InitPieVectTable();//初始化中断向量表
// StopCpuTimer0();//停止CpuTimer0定时器
// PieCtrlRegs.PIECTRL.bit.ENPIE = 1;//使能PIE相关模块
// PieCtrlRegs.PIEIER12.bit.INTx1 = 1;//使能12组第1中断 XINT3
// PieCtrlRegs.PIEIER12.bit.INTx2 = 1;//使能12组第2中断 XINT4
// PieCtrlRegs.PIEIER12.bit.INTx3 = 1;//使能12组第3中断 XINT5
// PieCtrlRegs.PIEIER12.bit.INTx4 = 1;//使能12组第4中断 XINT6
// PieCtrlRegs.PIEIER1.bit.INTx7 = 1;//使能1组第7中断 TINT0(CPU定时器0)
PieCtrlRegs.PIEIER8.bit.INTx5 = 1;//使能8组第5中断 SCIRXINT_C
PieCtrlRegs.PIEIER8.bit.INTx6 = 1;//使能8组第6中断 SCITXINT_C
PieCtrlRegs.PIEIER9.bit.INTx3 = 1;//使能9组第3中断 SCIRXINT_B
PieCtrlRegs.PIEIER9.bit.INTx4 = 1;//使能9组第4中断 SCITXINT_B
PieCtrlRegs.PIEIER9.bit.INTx1 = 1;//使能9组第1中断 SCIRXINT_A
PieCtrlRegs.PIEIER9.bit.INTx2 = 1;//使能9组第2中断 SCITXINT_A
IER |= (M_INT1 | M_INT8 | M_INT12 | M_INT9);//使能CPU级中断
EINT;//使能全局中断
ERTM;//使能实时中断
PieCtrlRegs.PIEACK.all = 0xFFFF;//响应中断
memset(MoBan,0x0,81920);// 1280*1024/16 = 81920 一共有81920个地址需要写0x0 一个地址16位
memset(MoBan1,0x0,81920);
memset(MoBan2,0x0,81920);
delay_ms(4000);// 如果不加这个延时,烧进去后程序运行就出现异常情况
mangui zhang:
你这个函数是干啥的 memset(MoBan2,0x0,81920);
感觉延时只对它起了作用吧
相关链接帖子 请查考
http://www.deyisupport.com/question_answer/microcontrollers/c2000/f/56/t/106276.aspx
/****************************主函数*******************************/
void main(void)
{
InitSysCtrl();//初始化系统控制:看门狗 锁相环 外设时钟使能
//InitGpio();//初始化通用GPIO
InitXintf();
InitXintf16Gpio(); //初始化外扩接口引脚
InitSciGpio();//初始化串口引脚
InitECanGpio();//初始化ECan引脚
InitECan();//初始化ECan
InitSci();//初始化串口
DINT;//禁止CPU中断
InitPieCtrl();//初始化PIE中断向量
IER = 0x0000;//禁止所有CPU中断
IFR = 0x0000;//清除中断标志位
InitPieVectTable();//初始化中断向量表
// StopCpuTimer0();//停止CpuTimer0定时器
// PieCtrlRegs.PIECTRL.bit.ENPIE = 1;//使能PIE相关模块
// PieCtrlRegs.PIEIER12.bit.INTx1 = 1;//使能12组第1中断 XINT3
// PieCtrlRegs.PIEIER12.bit.INTx2 = 1;//使能12组第2中断 XINT4
// PieCtrlRegs.PIEIER12.bit.INTx3 = 1;//使能12组第3中断 XINT5
// PieCtrlRegs.PIEIER12.bit.INTx4 = 1;//使能12组第4中断 XINT6
// PieCtrlRegs.PIEIER1.bit.INTx7 = 1;//使能1组第7中断 TINT0(CPU定时器0)
PieCtrlRegs.PIEIER8.bit.INTx5 = 1;//使能8组第5中断 SCIRXINT_C
PieCtrlRegs.PIEIER8.bit.INTx6 = 1;//使能8组第6中断 SCITXINT_C
PieCtrlRegs.PIEIER9.bit.INTx3 = 1;//使能9组第3中断 SCIRXINT_B
PieCtrlRegs.PIEIER9.bit.INTx4 = 1;//使能9组第4中断 SCITXINT_B
PieCtrlRegs.PIEIER9.bit.INTx1 = 1;//使能9组第1中断 SCIRXINT_A
PieCtrlRegs.PIEIER9.bit.INTx2 = 1;//使能9组第2中断 SCITXINT_A
IER |= (M_INT1 | M_INT8 | M_INT12 | M_INT9);//使能CPU级中断
EINT;//使能全局中断
ERTM;//使能实时中断
PieCtrlRegs.PIEACK.all = 0xFFFF;//响应中断
memset(MoBan,0x0,81920);// 1280*1024/16 = 81920 一共有81920个地址需要写0x0 一个地址16位
memset(MoBan1,0x0,81920);
memset(MoBan2,0x0,81920);
delay_ms(4000);// 如果不加这个延时,烧进去后程序运行就出现异常情况
Jason Wu4:
试试将如下MemCopy添加到初始化部分试试。
#if FLASH_MEMCOPY
/***************************************************************** Copy time critical code and Flash setup code to RAM The RamfuncsLoadStart, RamfuncsLoadEnd, and RamfuncsRunStart symbols are created by the linker. Refer to the F2808.cmd file.******************************************************************/
EALLOW; MemCopy(&RamfuncsLoadStart, &RamfuncsLoadEnd, &RamfuncsRunStart); EDIS;
// Call Flash Initialization to setup flash waitstates// This function must reside in RAM InitFlash(); // Initialize the Flash
#endif
/****************************主函数*******************************/
void main(void)
{
InitSysCtrl();//初始化系统控制:看门狗 锁相环 外设时钟使能
//InitGpio();//初始化通用GPIO
InitXintf();
InitXintf16Gpio(); //初始化外扩接口引脚
InitSciGpio();//初始化串口引脚
InitECanGpio();//初始化ECan引脚
InitECan();//初始化ECan
InitSci();//初始化串口
DINT;//禁止CPU中断
InitPieCtrl();//初始化PIE中断向量
IER = 0x0000;//禁止所有CPU中断
IFR = 0x0000;//清除中断标志位
InitPieVectTable();//初始化中断向量表
// StopCpuTimer0();//停止CpuTimer0定时器
// PieCtrlRegs.PIECTRL.bit.ENPIE = 1;//使能PIE相关模块
// PieCtrlRegs.PIEIER12.bit.INTx1 = 1;//使能12组第1中断 XINT3
// PieCtrlRegs.PIEIER12.bit.INTx2 = 1;//使能12组第2中断 XINT4
// PieCtrlRegs.PIEIER12.bit.INTx3 = 1;//使能12组第3中断 XINT5
// PieCtrlRegs.PIEIER12.bit.INTx4 = 1;//使能12组第4中断 XINT6
// PieCtrlRegs.PIEIER1.bit.INTx7 = 1;//使能1组第7中断 TINT0(CPU定时器0)
PieCtrlRegs.PIEIER8.bit.INTx5 = 1;//使能8组第5中断 SCIRXINT_C
PieCtrlRegs.PIEIER8.bit.INTx6 = 1;//使能8组第6中断 SCITXINT_C
PieCtrlRegs.PIEIER9.bit.INTx3 = 1;//使能9组第3中断 SCIRXINT_B
PieCtrlRegs.PIEIER9.bit.INTx4 = 1;//使能9组第4中断 SCITXINT_B
PieCtrlRegs.PIEIER9.bit.INTx1 = 1;//使能9组第1中断 SCIRXINT_A
PieCtrlRegs.PIEIER9.bit.INTx2 = 1;//使能9组第2中断 SCITXINT_A
IER |= (M_INT1 | M_INT8 | M_INT12 | M_INT9);//使能CPU级中断
EINT;//使能全局中断
ERTM;//使能实时中断
PieCtrlRegs.PIEACK.all = 0xFFFF;//响应中断
memset(MoBan,0x0,81920);// 1280*1024/16 = 81920 一共有81920个地址需要写0x0 一个地址16位
memset(MoBan1,0x0,81920);
memset(MoBan2,0x0,81920);
delay_ms(4000);// 如果不加这个延时,烧进去后程序运行就出现异常情况
qiang liu9:
回复 mangui zhang:
程序中用到了外扩接口同FPGA通讯 memset(MoBan2,0x0,81920);用来清零相关存储区域
我后来把memset();屏蔽掉了后,烧写还是出现同样的问题
/****************************主函数*******************************/
void main(void)
{
InitSysCtrl();//初始化系统控制:看门狗 锁相环 外设时钟使能
//InitGpio();//初始化通用GPIO
InitXintf();
InitXintf16Gpio(); //初始化外扩接口引脚
InitSciGpio();//初始化串口引脚
InitECanGpio();//初始化ECan引脚
InitECan();//初始化ECan
InitSci();//初始化串口
DINT;//禁止CPU中断
InitPieCtrl();//初始化PIE中断向量
IER = 0x0000;//禁止所有CPU中断
IFR = 0x0000;//清除中断标志位
InitPieVectTable();//初始化中断向量表
// StopCpuTimer0();//停止CpuTimer0定时器
// PieCtrlRegs.PIECTRL.bit.ENPIE = 1;//使能PIE相关模块
// PieCtrlRegs.PIEIER12.bit.INTx1 = 1;//使能12组第1中断 XINT3
// PieCtrlRegs.PIEIER12.bit.INTx2 = 1;//使能12组第2中断 XINT4
// PieCtrlRegs.PIEIER12.bit.INTx3 = 1;//使能12组第3中断 XINT5
// PieCtrlRegs.PIEIER12.bit.INTx4 = 1;//使能12组第4中断 XINT6
// PieCtrlRegs.PIEIER1.bit.INTx7 = 1;//使能1组第7中断 TINT0(CPU定时器0)
PieCtrlRegs.PIEIER8.bit.INTx5 = 1;//使能8组第5中断 SCIRXINT_C
PieCtrlRegs.PIEIER8.bit.INTx6 = 1;//使能8组第6中断 SCITXINT_C
PieCtrlRegs.PIEIER9.bit.INTx3 = 1;//使能9组第3中断 SCIRXINT_B
PieCtrlRegs.PIEIER9.bit.INTx4 = 1;//使能9组第4中断 SCITXINT_B
PieCtrlRegs.PIEIER9.bit.INTx1 = 1;//使能9组第1中断 SCIRXINT_A
PieCtrlRegs.PIEIER9.bit.INTx2 = 1;//使能9组第2中断 SCITXINT_A
IER |= (M_INT1 | M_INT8 | M_INT12 | M_INT9);//使能CPU级中断
EINT;//使能全局中断
ERTM;//使能实时中断
PieCtrlRegs.PIEACK.all = 0xFFFF;//响应中断
memset(MoBan,0x0,81920);// 1280*1024/16 = 81920 一共有81920个地址需要写0x0 一个地址16位
memset(MoBan1,0x0,81920);
memset(MoBan2,0x0,81920);
delay_ms(4000);// 如果不加这个延时,烧进去后程序运行就出现异常情况
qiang liu9:
回复 Jason Wu4:
我的程序里 没有FLASH_MEMCOPY这个变量 我把这部分代码加进main之后,编译不通过,后来把代码加到main.h中后编译成功,但烧写后现象还是依旧,我不清楚这段代码是用来干什么的,求解答,谢谢~~~
/****************************主函数*******************************/
void main(void)
{
InitSysCtrl();//初始化系统控制:看门狗 锁相环 外设时钟使能
//InitGpio();//初始化通用GPIO
InitXintf();
InitXintf16Gpio(); //初始化外扩接口引脚
InitSciGpio();//初始化串口引脚
InitECanGpio();//初始化ECan引脚
InitECan();//初始化ECan
InitSci();//初始化串口
DINT;//禁止CPU中断
InitPieCtrl();//初始化PIE中断向量
IER = 0x0000;//禁止所有CPU中断
IFR = 0x0000;//清除中断标志位
InitPieVectTable();//初始化中断向量表
// StopCpuTimer0();//停止CpuTimer0定时器
// PieCtrlRegs.PIECTRL.bit.ENPIE = 1;//使能PIE相关模块
// PieCtrlRegs.PIEIER12.bit.INTx1 = 1;//使能12组第1中断 XINT3
// PieCtrlRegs.PIEIER12.bit.INTx2 = 1;//使能12组第2中断 XINT4
// PieCtrlRegs.PIEIER12.bit.INTx3 = 1;//使能12组第3中断 XINT5
// PieCtrlRegs.PIEIER12.bit.INTx4 = 1;//使能12组第4中断 XINT6
// PieCtrlRegs.PIEIER1.bit.INTx7 = 1;//使能1组第7中断 TINT0(CPU定时器0)
PieCtrlRegs.PIEIER8.bit.INTx5 = 1;//使能8组第5中断 SCIRXINT_C
PieCtrlRegs.PIEIER8.bit.INTx6 = 1;//使能8组第6中断 SCITXINT_C
PieCtrlRegs.PIEIER9.bit.INTx3 = 1;//使能9组第3中断 SCIRXINT_B
PieCtrlRegs.PIEIER9.bit.INTx4 = 1;//使能9组第4中断 SCITXINT_B
PieCtrlRegs.PIEIER9.bit.INTx1 = 1;//使能9组第1中断 SCIRXINT_A
PieCtrlRegs.PIEIER9.bit.INTx2 = 1;//使能9组第2中断 SCITXINT_A
IER |= (M_INT1 | M_INT8 | M_INT12 | M_INT9);//使能CPU级中断
EINT;//使能全局中断
ERTM;//使能实时中断
PieCtrlRegs.PIEACK.all = 0xFFFF;//响应中断
memset(MoBan,0x0,81920);// 1280*1024/16 = 81920 一共有81920个地址需要写0x0 一个地址16位
memset(MoBan1,0x0,81920);
memset(MoBan2,0x0,81920);
delay_ms(4000);// 如果不加这个延时,烧进去后程序运行就出现异常情况
Jason Wu4:
回复 qiang liu9:
你加的不对,建议你参考TI官方例程中对这段代码的使用,是运行Flash中代码是将其搬移到RAM中运行,提高程序运行速度。
/****************************主函数*******************************/
void main(void)
{
InitSysCtrl();//初始化系统控制:看门狗 锁相环 外设时钟使能
//InitGpio();//初始化通用GPIO
InitXintf();
InitXintf16Gpio(); //初始化外扩接口引脚
InitSciGpio();//初始化串口引脚
InitECanGpio();//初始化ECan引脚
InitECan();//初始化ECan
InitSci();//初始化串口
DINT;//禁止CPU中断
InitPieCtrl();//初始化PIE中断向量
IER = 0x0000;//禁止所有CPU中断
IFR = 0x0000;//清除中断标志位
InitPieVectTable();//初始化中断向量表
// StopCpuTimer0();//停止CpuTimer0定时器
// PieCtrlRegs.PIECTRL.bit.ENPIE = 1;//使能PIE相关模块
// PieCtrlRegs.PIEIER12.bit.INTx1 = 1;//使能12组第1中断 XINT3
// PieCtrlRegs.PIEIER12.bit.INTx2 = 1;//使能12组第2中断 XINT4
// PieCtrlRegs.PIEIER12.bit.INTx3 = 1;//使能12组第3中断 XINT5
// PieCtrlRegs.PIEIER12.bit.INTx4 = 1;//使能12组第4中断 XINT6
// PieCtrlRegs.PIEIER1.bit.INTx7 = 1;//使能1组第7中断 TINT0(CPU定时器0)
PieCtrlRegs.PIEIER8.bit.INTx5 = 1;//使能8组第5中断 SCIRXINT_C
PieCtrlRegs.PIEIER8.bit.INTx6 = 1;//使能8组第6中断 SCITXINT_C
PieCtrlRegs.PIEIER9.bit.INTx3 = 1;//使能9组第3中断 SCIRXINT_B
PieCtrlRegs.PIEIER9.bit.INTx4 = 1;//使能9组第4中断 SCITXINT_B
PieCtrlRegs.PIEIER9.bit.INTx1 = 1;//使能9组第1中断 SCIRXINT_A
PieCtrlRegs.PIEIER9.bit.INTx2 = 1;//使能9组第2中断 SCITXINT_A
IER |= (M_INT1 | M_INT8 | M_INT12 | M_INT9);//使能CPU级中断
EINT;//使能全局中断
ERTM;//使能实时中断
PieCtrlRegs.PIEACK.all = 0xFFFF;//响应中断
memset(MoBan,0x0,81920);// 1280*1024/16 = 81920 一共有81920个地址需要写0x0 一个地址16位
memset(MoBan1,0x0,81920);
memset(MoBan2,0x0,81920);
delay_ms(4000);// 如果不加这个延时,烧进去后程序运行就出现异常情况
Terry Deng:
会不会是FPGA那边需要延时等待,否则整个系统就运行出问题了呢
/****************************主函数*******************************/
void main(void)
{
InitSysCtrl();//初始化系统控制:看门狗 锁相环 外设时钟使能
//InitGpio();//初始化通用GPIO
InitXintf();
InitXintf16Gpio(); //初始化外扩接口引脚
InitSciGpio();//初始化串口引脚
InitECanGpio();//初始化ECan引脚
InitECan();//初始化ECan
InitSci();//初始化串口
DINT;//禁止CPU中断
InitPieCtrl();//初始化PIE中断向量
IER = 0x0000;//禁止所有CPU中断
IFR = 0x0000;//清除中断标志位
InitPieVectTable();//初始化中断向量表
// StopCpuTimer0();//停止CpuTimer0定时器
// PieCtrlRegs.PIECTRL.bit.ENPIE = 1;//使能PIE相关模块
// PieCtrlRegs.PIEIER12.bit.INTx1 = 1;//使能12组第1中断 XINT3
// PieCtrlRegs.PIEIER12.bit.INTx2 = 1;//使能12组第2中断 XINT4
// PieCtrlRegs.PIEIER12.bit.INTx3 = 1;//使能12组第3中断 XINT5
// PieCtrlRegs.PIEIER12.bit.INTx4 = 1;//使能12组第4中断 XINT6
// PieCtrlRegs.PIEIER1.bit.INTx7 = 1;//使能1组第7中断 TINT0(CPU定时器0)
PieCtrlRegs.PIEIER8.bit.INTx5 = 1;//使能8组第5中断 SCIRXINT_C
PieCtrlRegs.PIEIER8.bit.INTx6 = 1;//使能8组第6中断 SCITXINT_C
PieCtrlRegs.PIEIER9.bit.INTx3 = 1;//使能9组第3中断 SCIRXINT_B
PieCtrlRegs.PIEIER9.bit.INTx4 = 1;//使能9组第4中断 SCITXINT_B
PieCtrlRegs.PIEIER9.bit.INTx1 = 1;//使能9组第1中断 SCIRXINT_A
PieCtrlRegs.PIEIER9.bit.INTx2 = 1;//使能9组第2中断 SCITXINT_A
IER |= (M_INT1 | M_INT8 | M_INT12 | M_INT9);//使能CPU级中断
EINT;//使能全局中断
ERTM;//使能实时中断
PieCtrlRegs.PIEACK.all = 0xFFFF;//响应中断
memset(MoBan,0x0,81920);// 1280*1024/16 = 81920 一共有81920个地址需要写0x0 一个地址16位
memset(MoBan1,0x0,81920);
memset(MoBan2,0x0,81920);
delay_ms(4000);// 如果不加这个延时,烧进去后程序运行就出现异常情况
qiang liu9:
回复 Jason Wu4:
好的,我试试,FPGA这边不会出现问题