此帖出自微控制器 MCU论坛
最新回复
我之前用philips的 LPC2292做一个项目时遇到过类似的情况
TaskA和TaskB都会通过I2C接口去读写从设备的寄存器, 当他们单独使用I2C接口时一切正常, 但当TaskA需要通过I2C接口每秒读一次从设备寄存器时, TaskB试图使用I2C接口写一字节给从设备会导致I2C瘫痪掉
后来的解决方法是在保证I2C空闲的状态下再进行读写,每次读写操作前先检测I2C之前的读写数据是否完全完成。
用task的话基本上就是在每次读写时使用下面的机制
//获取I2C接口,别的任务想使用就得等
xMutexTake( I2CMutex, portMAX_DELAY );
//读取操作
I2CWrite();或者 I2CRead();
// xI2CFinishedSemaphore在中断服务函数里当读写结束时释放,告诉调
//用它的任务操作完成,不用semaphore的话可以一直读取寄存器看是否成
xSemaphoreTake( xI2CFinishedSemaphore, portMAX_DELAY );
//释放I2C接口,别的等待的任务可以使用
xMutexGive( I2CMutex );
没有操作系统的话就得在每次读写前一直查询寄存器状态,确保空闲!
希望有帮助
详情
回复
发表于 2011-12-27 23:26
| ||
|
||
| |
|
|
| |
|
|
| |
|
|
| |
|
|
| |
|
|
| |
|
|
| |
|
|
此帖出自微控制器 MCU论坛
| ||
|
||
| |
|
|
| |
|
|
回复 楼主 stonye 的帖子
此帖出自微控制器 MCU论坛
赞赏 | ||
|
||
曾经的版主且威望大于2000,或对EEWORLD论坛有突出贡献的坛友
EEWorld Datasheet 技术支持