|
本渣渣最近在调C6678的IPC中断程序,想用一个简单的延时函数来延一下时,可是每当我一调用它的时候就发现核0重启,额,,,其实也不能说叫重启,就是某一段代码重复运行,重复的代码恰好在我调用的这个延时函数的前面。
下面是我写的延时函数:
- void delay_us(unsigned int us)
- {
- unsigned int i;
- for( ; us>0;us--)
- for(i=109;i>0;i--);
- }
- //delay_ms(1); 实测1.004ms 在1GHz的主频下
- void delay_ms(unsigned int ms)
- {
- for( ; ms>0;ms--)
- delay_us(1000);
- }
复制代码 然后我在下面的这段代码里调用了它:
- void Wake_up_other_core(void)
- {
- int *IpcGr0;
- int i;
- IpcGr0 = (int*)0x02620240;
- /*warning:when running on no-boot mode,core0~core7 must all be connected to the target*/
- for(i = 1;i < CORE_NUM_6678;i++) //core0 sent ipc interrupt to
- {
- delay_ms(2000);
- *(IpcGr0+i) = (*(IpcGr0+i)) | 0x00000001;
- }
- }
复制代码 下面的是主函数:
- void main(void)
- {
- System_init();
- UART_Interact_with_PC(); //使用DMA发送方式,如果每次发送时查询DMA是否发送完成容易卡死
- GPIO_init();
- // delay_ms(10);
- KeyStone_UART_write(string1, sizeof(string1), 0); // 使用串口0向PC发送核0启动完毕信息
- Wake_up_other_core(); //唤醒其它7个辅助核
- while(1)
- {
- // GPIO15_TOGGLE ;
- // delay_ms(1);
- //TSC_delay_us(1);
- }
- }
复制代码 每次运行到Wake_up_other_core(); 时,KeyStone_UART_write(string1, sizeof(string1), 0); 这个函数就被重复调用了,因为我在串口助手上接收到了我要发送到内容,但是正常的情况下只会发送一次,现在是重复发送。哦,对了我的串口是使用的DMA方式发送的,会不会是哪里有冲突?
|
|