TI中文支持网
TI专业的中文技术问题搜集分享网站

LAUNCHXL-CC1310: 如何动态切换CC1310的GPIO的输入输出状态?

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观察现象

赞(0)
未经允许不得转载:TI中文支持网 » LAUNCHXL-CC1310: 如何动态切换CC1310的GPIO的输入输出状态?
分享到: 更多 (0)

© 2024 TI中文支持网   网站地图 鲁ICP备2022002796号-1