TI中文支持网
TI专业的中文技术问题搜集分享网站

C6657 emif flash加载问题

ti专家你好:

    之前有提问过如何从c66x emif flash启动的问题,看了关于shine给的帖子里面有关cmd的配置,帖子如下:

但是我烧写进去之后,发现了一个问题,就是关于如果加入了中断函数比如说gpio中断,程序固化进去是不会进入中断的,不加入中断函数,程序固化又是成功的,我的cmd跟上面给的帖子的cmd一模一样,我查了资料是说中断不能放在flash中,所以我现在不知道如何去修改这个问题,因为程序里面必须需要中断,所以不知道如何去修改这个cmd,麻烦ti专家帮忙解答一下,谢谢!(我在之前的帖子有看到有一模一样的问题帖子如下:)

e2echina.ti.com/…/181247

JohnieSi1:

抱歉 第一个帖子发错了应该是e2e 论坛里面这个帖子e2e.ti.com/…/367102

JohnieSi1:

回复 JohnieSi1:

我的cmd是按照这个e2e.ti.com/…/367102 没有中断程序,固化到板子中是可以正常启动,但是一旦加入中断程序,程序跑到中断函数里面 然后就跑飞了

JohnieSi1:

回复 JohnieSi1:

我按照之前的一个帖子修改了cmd文件,修改如下:

然后我又在main函数入口把load在flash的vecs段直接搬移到L2SRAM上执行 程序仿真情况下直接就跑飞,麻烦ti专家帮忙指导一下!!!

KeyStone_noboot1.txt

我的main函数入口修改如下:

void main()

{

int i,ret;memcpy(&RAM_VECT_START,&FLASH_VECT_START,(size_t)&VECT_SIZE);BOOT_init();//初始化主频和ddrCSL_BootCfgUnlockKicker();//GPIO16作为普通io*(volatile unsigned int *)(0x02620580)= 0xffff0000;gpio_init();EMIF16_Init();memset(read_data,0,2048);TSC_init(); //enable time stame counter for testTM6657_BOARD_INIT();//gpio中断ret = DDRTest();while(1);

}

interrupt void GPIOIsr(){//CICClearSystemEvent(SOC_CIC_0_REGS, INTC0_GPIO16_B);flag= ~flag;gpGPIO_regs->BANK_REGISTERS[0].OUT_DATA =flag<<16;printf("gpio16 intc!\r\n");*(volatile unsigned int *)(0x02600000+0x0024)= 0; //清中断}

Shine:

请问您烧写的程序是裸机的还是基于sys/bios的?您指的中断程序是代码中加入中断向量表吗?不进入中断是中断没有产生?还是产生后不能进入中断子程序?

JohnieSi1:

回复 Shine:

我要烧写的程序是裸机程序 就是上面那个main函数程序,直接烧写在0x70000000这个地址!底下那个Gpioisr程序就是中断程序;仿真时正常的,加载到板子里面他可以进入到中断子程序,但是进入2-3之后他退出就直接程序跑飞。中断向量表如下:

(GPIO_vectos.asm)

.ref _c_int00 .ref GPIOIsr .ref Exception_service_routine .ref exception_record .global VECTORS

;————————————————————–

.sect ".text";create interrupt vector for NMINMI_ISR: STW B1,*-B15[1]

;save some key registers when exception happens MVKL exception_record,B1 MVKH exception_record,B1

STW B3, *+B1[0] STW A4, *+B1[1] STW B4, *+B1[2] STW B14, *+B1[3] STW B15, *+B1[4]

;jump to exception service routine MVKL Exception_service_routine, B1 MVKH Exception_service_routine, B1 B B1

LDW *-B15[1],B1 NOP 4

;————————————————————–;create interrupt vector for reset (interrupt 0)VEC_RESET .macro addr MVKL addr,B0 MVKH addr,B0 B B0 MVC PCE1,B0 NOP 4 .align 32 .endm

;create interrupt vector for other used interrupts VEC_ENTRY .macro addr STW B0,*–B15 MVKL addr,B0 MVKH addr,B0 B B0 LDW *B15++,B0 NOP 4 .align 32 .endm

;create interrupt vector for unused interrupts VEC_DUMMY .macrounused_int?: B unused_int? ;dead loop for unused interrupts NOP 5 .align 32 .endm

;————————————————————–;interrupt vector table .sect "vecs" .align 1024vectors: VEC_RESET _c_int00 ;RESET VEC_ENTRY NMI_ISR ;NMI/Exception VEC_DUMMY ;RSVD VEC_DUMMY ;RSVD VEC_ENTRY GPIOIsr ;interrupt 4 VEC_DUMMY ;interrupt 5 VEC_DUMMY ;interrupt 6 VEC_DUMMY ;interrupt 7 VEC_DUMMY ;interrupt 8 VEC_DUMMY ;interrupt 9 VEC_DUMMY ;interrupt 10 VEC_DUMMY ;interrupt 11 VEC_DUMMY ;interrupt 12 VEC_DUMMY ;interrupt 13 VEC_DUMMY ;interrupt 14 VEC_DUMMY ;interrupt 15

.end

JohnieSi1:

回复 Shine:

说白了 现在就是 我在cmd指定段到flash上面 我无法搬移到ram中运行,不清楚到底是怎么情况,在cmd指定的段在flash上的 我都无法正常搬移,只要在main函数入口memcpy函数,他都会直接跑飞 。

Shine:

回复 JohnieSi1:

把heap stack加大试试。

Shine:

回复 Shine:

另外,建议参考下面这个帖子,用IBL来搬移代码。
e2echina.ti.com/…/45496

赞(0)
未经允许不得转载:TI中文支持网 » C6657 emif flash加载问题
分享到: 更多 (0)