嵌入式开发者社区
标题:
软件延时导致C6678复位
[打印本页]
作者:
IRONMAN
时间:
2016-7-30 10:42
标题:
软件延时导致C6678复位
本渣渣最近在调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方式发送的,会不会是哪里有冲突?
作者:
human
时间:
2016-8-3 18:40
建议设置断点,然后进行单步调试
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4