各位朋友,
在原有CC2541产品基础上我们得添加一个IC卡(SPI接口)功能,由于管脚吃紧,只得借用I2C脚了。
不过发现I2C脚作GPIO时用时不属于任何常用GPIO,譬如P0/1/2之类。这在定义信号脚时碰到了困难,如下:
//////////////////////////////////
//端口定义
/////////////////////////////////////////////////////////////////////
//MFRC500
#define MF522_RST P0_6 // RESET
#define MF522_NSS ??? // SDA
#define MF522_SCK ??? // SDK
#define MF522_SI P1_4 // MOSI
#define MF522_SO P1_5 // MISO
请教各位,“MF522_NSS”及“MF522_SCK”如何定义好?
以下是错误示例:
#define MF522_NSS I2CIO.SDAD // ERROR!
#define MF522_SCK I2CIO.SCLD // ERROR!
搜索过网络相关贴,但是没搜索到。
谢谢!
Viki Shi:
论坛有类似问题,请参考这边的例子: e2echina.ti.com/…/23777
用户手册也有相关内容,第 20.1.8 章,关于如何配置寄存器,关闭I2C,然后配置成GPIO
da qin zheng sheng:
这个比较好用,可以参考
blog.csdn.net/…/50987917
Susan Yang:
user3840094:
回复 Viki Shi:
Viki and 大秦正声:
谢谢两位的回复!
两位推荐的链接我都看过。但我还是不会如何调用这两个GPIO口,如我发帖内容,如何将I2C设置成GPIO的脚替换下面红色字体内容呢?
#define MF522_NSS I2CIO.SDAD // ERROR!#define MF522_SCK I2CIO.SCLD // ERROR!
所以我得承认,我是属于那种很笨的人了。
譬如,下面的这些设置我在别处都用过:
在初始化时,设置I2C为GPIO:
I2CWC |= 0x83; I2CIO = 0x03;
还有这个PORT口的设置
输入
P0SEL &= ~P0_PIN; // Select pin to function as General Purpose I/O. P0DIR &= ~P0_PIN; // Select direction as input. P0INP &= ~P0_PIN; // Pull up/pull down.
输出
P1SEL &= BIT0; // GPIO. P1DIR |= BIT0; // Output. P1_0 = 0; // LED1 off.
但是这个I2C口作GPIO是不属于任何一个PORTn,怎么被调用呢。
user3840094:
回复 Susan Yang:
Dear Susan,
I can not see what you have posted. 奇怪了。
user3840094:
回复 user3840094:
必须自己回复了,但愿像我一样笨的同仁们可以节约点时间放在产品开发上面了(笨人未必就不能开发不了产品的),而不是被某个芯片的某个功能卡住好多天。
#define I2C_SCLD BV(1) // SCL data value#define I2C_SDAD BV(0) // SDA data value
#define MF522_NSS_0 I2CIO &=~I2C_SDAD //SDA=0#define MF522_NSS_1 I2CIO |=I2C_SDAD //SDA=1#define MF522_SCK_0 I2CIO &=~I2C_SCLD //SCL=0#define MF522_SCK_1 I2CIO |=I2C_SCLD //SCL=1
只能用这个方法去调用了。虽然别扭点,能用就行!
上面是通过示波器测试可以正常工作的,我尽可能做到不误导同仁了。
感叹一点:
这个论坛很多贴是无果而终的。其实这于求助者没起到任何正面促进作用!基本是浪费网络资源了。
笨人经常去PIC CCS 论坛去看看走走聊聊,也常去MICROCHIP论坛坐坐,基本没见废贴(就是那些无果而终的贴)。
该坛子得反思了。