Board logo

标题: hcs08 IIC 问题 [打印本页]

作者: huangln    时间: 2007-11-27 14:56     标题: hcs08 IIC 问题

hcs08使用IIC与其他CPU通讯,本机做SLAVE接收,IIC为中断方式接收,运行的时候会跑到cpu.c文件中的ISR(Cpu_interrupt)函数中,就再也出不来了,死在里面.如果把IICIE禁止,就不会有这个问题. 请问各位,这个中断函数和IICIE是怎么产生联系的,项目中其他的定时和IRQ中断也在用,却不会出现问题。
作者: strongchen    时间: 2007-11-27 16:04

你说的这个中断不是IIC中断吗?那它是什么中断,中断地址是什么?
作者: huangln    时间: 2007-11-28 10:44

应该不是IIC中断吧,它在cpu.c文件中,而且描述中说明:The method services unhandled interrupt vectors.This method is internal. It is used by Processor Expert only.
应该如何看它的地址?在Assembly窗口中么?
作者: strongchen    时间: 2007-11-28 11:08

那么它是未用的中断。你可以试试将每个未用的中断都写一个空的,不同的中断函数,这样就可以看到到底是产生了哪个中断。
作者: huangln    时间: 2007-11-29 17:58

已经确认了,果然是IIC中断引起的, cpu.c文件中的ISR(Cpu_Interrupt)函数是对所有未处理的中断进行处理吗?可以在里面写代码吗?
在使用PE自动生成的时候,系统生成了OnRxChar,OnTxChar,OnNack三个中断函数,我以为出现中断时会自动跳进这几个函数处理,现在看起来产生前面问题的原因是没有对应VECTOR文件中的IIC中断地址的函数,导致了出现的IIC中断一直在pending状态.处理这个中断需要写一个_interrupt void I2C_ISR(void)函数,然后在这个函数中判断相应标志位再转入对应处理函数,我这样的理解对吗?在vectors.c文件中的中断函数地址表里仍然是Cpu_Interrup,是否需要把Int no.17改成I2C_ISR以与中断函数名对应?
作者: huangln    时间: 2007-11-29 18:02

在QG8的spec中关于IICIF是这么写的
IIC Interrupt Flag — The IICIF bit is set when an interrupt is pending. This bit must be cleared by software, by writing a one to it in the interrupt routine.
为了清除这个标志位,还要向这一位写"1"??感觉很难理解,还是spec上写错了?
作者: strongchen    时间: 2007-11-30 10:25

对的,飞思卡尔的很多MCU标志的清零方法都是去写1。




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0