打印

PSoC I2CHW做slave 时, 中断服务子程序如何写?

[复制链接]
7928|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Jerric|  楼主 | 2011-12-8 14:09 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
21434 中  I2CHW做slave 时, 中断服务子程序如何写?

如Timer8是如下这样,但 I2CHW呢?  
#pragma interrupt_handler Timer8_ISR
void Timer8_ISR(void)




EzI2Cs 有没有中断服务子程序??
沙发
Go_PSoC| | 2011-12-8 22:55 | 只看该作者
给你他的用户模块手册,里面有介绍

001-66291_I2CHW.pdf

377.65 KB

使用特权

评论回复
板凳
Go_PSoC| | 2011-12-8 23:03 | 只看该作者
EzI2Cs的

001-45841_EzI2Cs.pdf

346.94 KB

使用特权

评论回复
地板
japrincess| | 2011-12-8 23:06 | 只看该作者
我使用的芯片是 CY8C29466,因为项目中要使用两块功能几乎相同的 pSoc 模块,所以我打算把两块芯片的代码放在一块。但是与主芯片通信的 I2C 地址(slave模式),却是不可以一样的。
默认生成的I2C HW 模块,address 是在 Device Editor 模块中定死的;其实看自动生成的代码,会发现地址只是被预定义为一个值I2CHW_1_SLAVE_ADDR。而对这个值的使用,只在 i2chw_1int.asm 中遇到。具体就是在判断master发过来的 address 是否是本 slave 的address.
原始代码片断(自动生成):
    mov A, reg[I2CHW_1_DR]
    and F, 0xF9                                                     
    rrc A                                                           
    xor A,  I2CHW_H_SLAVE_ADDR
    jnz I2C_Terminate
    or [I2CHW_1_RsrcStatus], I2CHW_ISR_ACTIVE
I2CHW_1_DR 里放置的就是 master 发过来的address,而 I2CHW_H_SLAVE_ADDR 就是pSoc芯片定义的I2C address. 只要根据实际需求把 I2CHW_H_SLAVE_ADDR 换乘其他的值,就可以在程序中任意改变 I2C 的address了。
常见的方法,是读取某些 GPIO 引脚的高低,根据高低不同,把 A 与不同的质进行比较。

使用特权

评论回复
5
Jerric|  楼主 | 2011-12-9 08:32 | 只看该作者
谢谢板主,但是用户模块手册上并没有介绍 中断服务子程序呀~~
有没有应该的例程呢!~~

使用特权

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

本版积分规则

15

主题

128

帖子

4

粉丝