打印
[ARM入门]

cortex a9双核 CPU1触发CPU0软件中断问题

[复制链接]
4147|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
pingis58|  楼主 | 2016-1-14 16:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
   我用的是ZYNQ的CORTEX A9双核。   现在遇到问题,CPU0触发自己的 0号软件中断,整个系统正常。但把触发部分放到CPU1核,其他所有内容不变。结果导致响应了0号软件中断后,以后再也不响应中断,包括定时器中断,软件中断。
  经过对比查看,有关中断状态的寄存器都一致,在定时器部分已有中断请求,就是不能响应中断。调试无解,请教大家能不能这样用。
评论
yjmzj 2018-5-9 15:44 回复TA
由于字数限制的问题,再加一句,期待您的回复,十分感谢! 
yjmzj 2018-5-9 15:43 回复TA
您好!我也遇到和您一样的问题,请问您是怎么解决的,清除时调哪个函数,如何带上CPU ID,还是直接对着寄存器操作,ICDICPR清除寄存器只能读,谢谢 

相关帖子

沙发
阿南| | 2016-1-15 09:28 | 只看该作者
把中断状态寄存值放上来看看

使用特权

评论回复
板凳
lelee007| | 2016-1-15 16:22 | 只看该作者
换CYCLONE V SOC我告诉你怎么回事

使用特权

评论回复
地板
pingis58|  楼主 | 2016-1-15 18:42 | 只看该作者
lelee007 发表于 2016-1-15 16:22
换CYCLONE V SOC我告诉你怎么回事

大哥,X家和A家的,都是CORTEX A9的,求你赐于我知识吧。万分感谢膜拜

使用特权

评论回复
5
pingis58|  楼主 | 2016-1-15 19:11 | 只看该作者
阿南 发表于 2016-1-15 09:28
把中断状态寄存值放上来看看

谢版主回复,现在下班回家,只以回忆些寄存器值,如果有其他需求的,待下周上班调试再给出来。另简单描述我的调用,看有没有错的地方。
1,我查看的寄存器CPU0响应软件中断前后均一致(记的不多不好意思,可能没什么参考价值),如下:
ICCICR   0x0007
ICCPMR  ICCBPR   ICCEOIR ICCRPR记不清,中断前后一致一样,应该无所谓
ICCIAR   Debug模式下读不出来N/A
ICDDCR  0x01
下面是软件中断寄存器。奇怪的是使能后,不知道从哪个寄存器看中断的使能状态。
ICDISER0   interrupt set-enable register0   0x02ffff
ICDICER0   interrupt clr-enable register0   0x02ffff    不能响应中断后,我重新 clear 后 set都没用
ICDIPTR0   目标CPU寄存器   0x01 因为只使能了0号软件中断
私有定时器
CONTROL  0x07 定时器中断使能,  自动加载,使能
STATUS    0x01  溢出事件置位。   
但看不到GIC中断哪些位已使能,或末使能的。对A9不熟,没看到寄存器
2.我软件中断的操作过程(仅软件中断部分,不以设置触发沿,很简单)
     1)CPU0核 软件服务程序注册
     2)ICDISER0  设置  0x01 使能软件中断0
     3)在CPU1核触发,设置ICDSGIR寄存器为   0x00010000
     4)CPU0软件中断能应一次,然后就所有中断都不响应了。中断返回后程序仍在跑。
   如果上述的3过程,软件中断触发部分,放在CPU0核自己触发,则没有任何 异常,响应软件中断后,仍能正常响应中断。仅是触发的CPU不一样。
     或者我描述问题不到位,版主可以给个建议,一般CPU1触发CPU0软件中断要哪些步骤,需要注意什么。网上找不到相应例程,看了手册也没太明白,就知道能这样用。

使用特权

评论回复
6
阿南| | 2016-1-15 20:32 | 只看该作者
pingis58 发表于 2016-1-15 19:11
谢版主回复,现在下班回家,只以回忆些寄存器值,如果有其他需求的,待下周上班调试再给出来。另简单描述 ...

实践上只需要查看一下,IRQ和FIQ的状态标志,是否已经进入中断状态了

使用特权

评论回复
7
lyyppp| | 2016-11-20 20:04 | 只看该作者
你好,求助该平台的软件中断设计步骤。。。

使用特权

评论回复
8
lyyppp| | 2016-11-21 20:24 | 只看该作者
你好,我想咨询下,你在zynq7000上的软件中断的建立过程,我直接写ICDSGIR寄存器好像没有用,是还需要配置其他寄存器吗?我只需要产生软件一个中断,然后在本cpu中响应。急!急!请支招。

使用特权

评论回复
9
pingis58|  楼主 | 2016-11-22 11:31 | 只看该作者
本帖最后由 pingis58 于 2016-11-22 11:33 编辑
lyyppp 发表于 2016-11-21 20:24
你好,我想咨询下,你在zynq7000上的软件中断的建立过程,我直接写ICDSGIR寄存器好像没有用,是还需要配置 ...

先初始化异常  Xil_ExceptionInit
挂系统中断处理函数  Xil_ExceptionRegisterHandler
挂软件中断响应函数  XScuGic_Connect
使能软件中断  XScuGic_Enable(IntcInstancePtr, SW_INT_ID);
使能中断异常Xil_ExceptionEnableMask(XIL_EXCEPTION_IRQ);

软件触发即可 :XScuGic_SoftwareIntr(&IntcInstancePtr,0, XSCUGIC_SPI_CPU1_MASK);

我是调用官方库函数的,版本  ISE14.7 下的SDK 。触发时应该是仅需要触发对应CPU的软件中断号即可

使用特权

评论回复
10
lotoohe| | 2017-2-14 12:59 | 只看该作者
你好.https://bbs.21ic.com/icview-1270714-1-1.html
我也遇到了你上面的问题,请问你是怎么解决的?

使用特权

评论回复
11
pingis58|  楼主 | 2017-2-16 13:16 | 只看该作者
本帖最后由 pingis58 于 2017-2-16 13:19 编辑
lotoohe 发表于 2017-2-14 12:59
你好.https://bbs.21ic.com/icview-1270714-1-1.html
我也遇到了你上面的问题,请问你是怎么解决的? ...

ISE自带的SDK  官方给的库有问题。触发软件中断的时候,清除时要把CPU_ID带过去。自己添加下,

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

21

主题

131

帖子

3

粉丝