Part Number:LAUNCHXL-CC1310Other Parts Discussed in Thread:CC1310
大家好,有谁知道如何动态切换CC1310的GPIO的输入输出状态?采用动态切换的时候,如何读取输入高低电平,以及输出高低电平?
有用如下语句切换,似乎没用。这时候pinTable中是否需要处理?
#define SDA_OUT (GPIO_setConfig(Board_DAT, GPIO_CFG_OUT_STD | GPIO_CFG_OUT_HIGH))
#define SDA_IN (GPIO_setConfig(Board_DAT, GPIO_CFG_INPUT))
SDA_IN;
while(PIN_getInputValue(Board_DAT) != false){….}
SDA_OUT;
PIN_setOutputValue(pinHandle, Board_DAT, 1);
Kevin Qiu1:
PIN和GPIO驱动是不同的实现方式,参考使用GPIO的实现方式:
https://dev.ti.com/tirex/content/simplelink_cc13x0_sdk_4_20_01_03/docs/tidrivers/doxygen/html/_g_p_i_o_8h.html
,
?? ?:
你好Kevin,我移除了pinTable中Board_DAT的定义,然后参照GPIO的设置修改如下,依然没有输出效果,高电平很低,跟随旁边一个SCK管脚的信号…
#define SDA_OUT (GPIO_setConfig(Board_DAT, GPIO_CFG_OUT_STD | GPIO_CFG_OUT_HIGH))#define SDA_IN (GPIO_setConfig(Board_DAT, GPIO_CFG_INPUT)) GPIO_init();
SDA_IN;
while(GPIO_read(Board_DAT) != false){….}
SDA_OUT;
GPIO_write( Board_DAT, 1);
GPIO_write( Board_DAT, 0);
GPIO_write( Board_DAT, 1);
,
Kevin Qiu1:
我用文档中的例子测了一下,可以改变IO的状态
?? ? 说:
#define SDA_OUT (GPIO_setConfig(Board_DAT, GPIO_CFG_OUT_STD | GPIO_CFG_OUT_HIGH))#define SDA_IN (GPIO_setConfig(Board_DAT, GPIO_CFG_INPUT)) GPIO_init();
GPIO_init();必须在所有GPIO API之前使用,所以上面宏定义的方式可能需要改一下,不使用宏定义试试
,
?? ?:
GPIO_init()是在最前面调用的,也把预定义去掉直接引用试过,还是不行。
Board_DAT只使用了GPIO方法。但是其他管脚使用的是库默认的PIN方法。有没有问题?
,
?? ?:
方便提供一个示例程序嘛?我的程序如下:
void weightMesure(){ static uint32_t weightPre = 0,stopCnt = 0; uint32_t tmpWeight = 0,i=0; uint16_t config = 0x6520,cfgMsk = 0x4000;GPIO_init(); GPIO_setConfig(Board_CS1237_DAT, GPIO_CFG_IN_PU); while(GPIO_read(Board_CS1237_DAT) != false) { PIN_setOutputValue(pinHandle, Board_CS1237_CLK, 0); usleep(100); if(tmpWeight++>1000)break; } tmpWeight = 0; for(i = 0;i<24;i++) { tmpWeight<<=1; PIN_setOutputValue(pinHandle, Board_CS1237_CLK, 1); usleep(1); PIN_setOutputValue(pinHandle, Board_CS1237_CLK, 0); if(GPIO_read(Board_CS1237_DAT) != 0)tmpWeight|=1; usleep(1); }
for(i = 24;i<46;i++) { PIN_setOutputValue(pinHandle, Board_CS1237_CLK, 1); if(i == 28) { GPIO_setConfig(Board_CS1237_DAT, GPIO_CFG_OUT_STD | GPIO_CFG_OUT_HIGH); } if(i>=29) { if(i!=36) { if(config&cfgMsk) GPIO_write(Board_CS1237_DAT, 1); else GPIO_write(Board_CS1237_DAT, 0); cfgMsk>>=1; } else{ GPIO_setConfig(Board_CS1237_DAT, GPIO_CFG_OUT_STD | GPIO_CFG_OUT_HIGH); } } usleep(1); PIN_setOutputValue(pinHandle, Board_CS1237_CLK, 0); usleep(1);}GPIO_setConfig(Board_CS1237_DAT, GPIO_CFG_IN_PU);PIN_setOutputValue(pinHandle, Board_CS1237_CLK, 1);weightPre = (weightPre + tmpWeight )/2;return weightPre ;}
,
Kevin Qiu1:
不同的IO分别使用PIN和GPIO驱动程序应该是没问题的
建议你用C:\ti\simplelink_cc13x0_sdk_4_20_01_03\examples\rtos\CC1310_LAUNCHXL\drivers\empty例程单独测试GPIO动态配置
可以将IO先配置为输入,然后再动态配置为输出点亮LED观察现象