返回信息流硬件环境
GX-ARM9 -2410BP,通过操作S3C2410内的SD卡主机控制器寄存器发送命令操作SD卡
软件环境
VxWorks操作系统,使用intConnect()和intEnable()完成了ISR的挂接和开启,两个函数均返回OK,读取INTMSK的值确认了SDI的中断已经开启。
预想的操作
发送CMD0后使用中断方式检验命令操作完成,即触发ISR后,ISR先验证SDICSTA的cmdSent对应位,之后释放信号量确认操作完成。发送CMD0 的任务获得信号量后继续SD卡的初始化...
遇到的问题
开启SDIIMSK的cmdSent位的屏蔽后,发送CMD0后目标板就死机了,表现为target server和target agent的连接断开
请教原因...
这是一条镜像帖。来源:北邮人论坛 / embedded-system / #5041同步于 2009/6/8
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Embedded_System机器人发帖
中断方式操作SD卡,目标板死机...
wufeissdfz
2009/6/8镜像同步6 回复
订阅后,新回复会通过你的通知中心匿名送达。
6 条回复
【 在 hobby 的大作中提到: 】
: 中断处理函数调试过吗?
: 是不是中断处理函数中挂掉了或者中断处理函数被反复调用,使得连接断开。
: 如果可能是这样的原因,可以在中断处理函数中做点灯什么的
我没把故障说清楚,按照预想发送CMD0后应触发了中断,执行ISR。
但ISR中的logMsg()并没有想超级终端输出信息,程序执行到设置寄存器发送CMD0后目标机就死了...
我发现不开启SDIIMSK中对cmdSent的屏蔽,发送CMD0目标机不会死(没触发中断目标机就不死)乖乖的semTake()在那儿
我的ISR中就logMsg(),复位中断源,释放信号量这3个语句为什么会死呢?
话说惭愧,我不会在中断中点灯...
vxworks里面中断和点灯怎么搞不懂,但是Linux里面搞过,原理应当大同小异吧。
Linux中
1、中断打印使用printk,并需要合理设置消息等级(总共5级),高等级的消息会打印出来,低等级的会被过滤(当然也可以通过修改一个什么设置改变过滤的标准)。这个如果你需要我再查
2、点灯的话,一般的就是往某个IO端口输出一个有效电平。就我能想到的,IO端口的控制方式有两种,一种是微原里那种外部端口(忘记叫什么名字了),另一种是寄存器的GPIO管脚引出的。我做过的是后者,只要按照CPU手册向相应寄存器中设置值即可。
【 在 hobby 的大作中提到: 】
: vxworks里面中断和点灯怎么搞不懂,但是Linux里面搞过,原理应当大同小异吧。
: Linux中
: 1、中断打印使用printk,并需要合理设置消息等级(总共5级),高等级的消息会打印出来,低等级的会被过滤(当然也可以通过修改一个什么设置改变过滤的标准)。这个如果你需要我再查
: ...................
多谢回复
1logMsg()是向VxWorks下的一个任务tLogTask发消息,格式化输出由这个任务负责,不经过I/O系统不会导致阻塞,所以中断中的消息输出VxWorks一般都用它,不会出错(用系统时钟中断测试过了)
2操作SD卡也是走的看手册设置寄存器的路,我再看看手册
主要还是想咨询为什么进入ISR会出错...
(系统时钟的ISR为啥很健康呢...)
【 在 wufeissdfz 的大作中提到: 】
: 多谢回复
: 1logMsg()是向VxWorks下的一个任务tLogTask发消息,格式化输出由这个任务负责,不经过I/O系统不会导致阻塞,所以中断中的消息输出VxWorks一般都用它,不会出错(用系统时钟中断测试过了)
: 2操作SD卡也是走的看手册设置寄存器的路,我再看看手册
: ...................
哦 中断怎么会挂就不知道,没弄过SD卡的说
不过要想知道死在哪儿了,在没打印的情况下,倒是只能点灯了
CMD0好像是切换到SPI模式,好像2410的host不支持SPI模式,楼主发了CMD0后,卡切换至SPI模式,reponse将从数据线上回复,而你host不支持SPI,所以host死了,不知道我说的对不对,楼主参考。