嵌入式技术论坛
直播中

李丽

8年用户 1507经验值
私信 关注
[问答]

rt-thread从cpu1启动无法响应外部中断怎么办呢?

各位大佬好,打扰了,求助一个问题。最经尝试让 rt-thrad 在 zynq7000 的cpu1 启动运行 (注: libcpu 使用的 v4.0.5 cortex-a 的), 基本框架已经可以正常运行了(私有定时器可以正常中断驱动调度器, 在一个线程下可以让led灯正常闪烁) 但似乎无法响应共享的外设中断 (SPI). 例如外部串口设备, 之前在 cpu0 上是可以正常使用的。尝试使用 rt_hw_interrupt_set_target_cpus, rt_hw_interrupt_get_target_cpus数值确实改变了, 但是似乎也并不起作用. 请问哪位大佬知道应该如何做, 谢谢!
测试代码:
extern unsigned int rt_hw_interrupt_get_target_cpus(int vector);
extern void rt_hw_interrupt_set_target_cpus(int vector, unsigned int cpu_mask);
int main()
{
    rt_pin_mode(15, PIN_MODE_OUTPUT);
    // 设置 console 口
    rt_console_set_device("pl_uart7");
    rt_kprintf("rt_hw_interrupt_get_target_cpus: %x \n", rt_hw_interrupt_get_target_cpus(68U));
    system("gic_dump");
    rt_hw_interrupt_set_target_cpus(68, 0x02);
    rt_kprintf("gic_dump after set target: \n");
    system("gic_dump");
    rt_kprintf("rt_hw_interrupt_get_target_cpus: %x \n", rt_hw_interrupt_get_target_cpus(68U));
    while(1)
    {
        // .............
    }
}
输出:
2.jpg
但通过串口输入无响应


回帖(3)

李丽

2023-5-5 11:41:28
突然想到 gic 对于两个 cpu 核而言似乎也是共享资源,不太好办了。。。
举报

王杰

2023-5-5 11:41:36
您好,我也碰到了这个spi中断不响应的问题,只要一中断就直接异常了,请问您解决了吗?
举报

李霞

2023-5-5 11:41:45
除了安装中断,还应该设置触发模式,触发模式使用以下函数进行设置
rt_hw_interrupt_set_triger_mode(id,mode);
这个函数的注释:
mode: interrupt triger mode; 0: level triger, 1: edge triger
触发模式应该设置为1.

但是参考xilinx的bsp优先级设置函数
void XScuGic_SetPriorityTriggerType(XScuGic *InstancePtr, u32 Int_Id,u8 Priority, u8 Trigger)
以及查询ug585,SPI中断的这个触发模式只能设置为0和3,3代表上升沿。

所以触发模式设置为3就能正常SPI中断了。
rt_hw_interrupt_set_triger_mode(id,3);
举报

更多回帖

发帖
×
20
完善资料,
赚取积分