"Thread: SysConfig"中讨论的其他器件
大家好!
GPIO_READ ()函数不返回配置为输出的管脚的值?
旧引脚驱动程序具有用于此目的的特定功能、但 GPIO 库中似乎没有该功能。
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
大家好!
GPIO_READ ()函数不返回配置为输出的管脚的值?
旧引脚驱动程序具有用于此目的的特定功能、但 GPIO 库中似乎没有该功能。
您好、Thies、
我刚刚尝试过、它确实使用 GPIO_read 返回正确的状态。 下面是一个基于 timerled 项目的示例、其中 GpioState 是引脚的状态:
/*
* Copyright (c) 2016-2020, Texas Instruments Incorporated
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* * Neither the name of Texas Instruments Incorporated nor the names of
* its contributors may be used to endorse or promote products derived
* from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/*
* ======== timerled.c ========
*/
#include <stddef.h>
/* Driver Header files */
#include <ti/drivers/GPIO.h>
#include <ti/drivers/Timer.h>
/* Board Header file */
#include "ti_drivers_config.h"
volatile uint_fast8_t GpioState = 0;
/* Callback used for toggling the LED. */
void timerCallback(Timer_Handle myHandle, int_fast16_t status);
/*
* ======== mainThread ========
*/
void *mainThread(void *arg0)
{
Timer_Handle timer0;
Timer_Params params;
/* Call driver init functions */
GPIO_init();
Timer_init();
/* Configure the LED pin */
GPIO_setConfig(CONFIG_GPIO_LED_0, GPIO_CFG_OUT_STD | GPIO_CFG_OUT_LOW);
/* Turn off user LED */
GPIO_write(CONFIG_GPIO_LED_0, CONFIG_GPIO_LED_OFF);
/*
* Setting up the timer in continuous callback mode that calls the callback
* function every 1,000,000 microseconds, or 1 second.
*/
Timer_Params_init(¶ms);
params.period = 1000000;
params.periodUnits = Timer_PERIOD_US;
params.timerMode = Timer_CONTINUOUS_CALLBACK;
params.timerCallback = timerCallback;
timer0 = Timer_open(CONFIG_TIMER_0, ¶ms);
if (timer0 == NULL)
{
/* Failed to initialized timer */
while (1) {}
}
if (Timer_start(timer0) == Timer_STATUS_ERROR)
{
/* Failed to start timer */
while (1) {}
}
return (NULL);
}
/*
* This callback is called every 1,000,000 microseconds, or 1 second. Because
* the LED is toggled each time this function is called, the LED will blink at
* a rate of once every 2 seconds.
*/
void timerCallback(Timer_Handle myHandle, int_fast16_t status)
{
GPIO_toggle(CONFIG_GPIO_LED_0);
GpioState = GPIO_read(CONFIG_GPIO_LED_0);
}
此致、
Arthur
Arthur、您好!
感谢您的快速回复。
这仍然不起作用、GipioState 不会改变、我已经添加了一个计数器来显示 LED 的切换次数
/*
* Copyright (c) 2016-2020, Texas Instruments Incorporated
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* * Neither the name of Texas Instruments Incorporated nor the names of
* its contributors may be used to endorse or promote products derived
* from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/*
* ======== timerled.c ========
*/
#include <stddef.h>
/* Driver Header files */
#include <ti/drivers/GPIO.h>
#include <ti/drivers/Timer.h>
/* Board Header file */
#include "ti_drivers_config.h"
volatile uint_fast8_t GpioState = 0;
volatile uint8_t counter = 0;
/* Callback used for toggling the LED. */
void timerCallback(Timer_Handle myHandle, int_fast16_t status);
/*
* ======== mainThread ========
*/
void *mainThread(void *arg0)
{
Timer_Handle timer0;
Timer_Params params;
/* Call driver init functions */
GPIO_init();
Timer_init();
/* Configure the LED pin */
GPIO_setConfig(CONFIG_GPIO_LED_0, GPIO_CFG_OUT_STD | GPIO_CFG_OUT_LOW);
/* Turn off user LED */
GPIO_write(CONFIG_GPIO_LED_0, CONFIG_GPIO_LED_OFF);
/*
* Setting up the timer in continuous callback mode that calls the callback
* function every 1,000,000 microseconds, or 1 second.
*/
Timer_Params_init(¶ms);
params.period = 1000000;
params.periodUnits = Timer_PERIOD_US;
params.timerMode = Timer_CONTINUOUS_CALLBACK;
params.timerCallback = timerCallback;
timer0 = Timer_open(CONFIG_TIMER_0, ¶ms);
if (timer0 == NULL)
{
/* Failed to initialized timer */
while (1) {}
}
if (Timer_start(timer0) == Timer_STATUS_ERROR)
{
/* Failed to start timer */
while (1) {}
}
return (NULL);
}
/*
* This callback is called every 1,000,000 microseconds, or 1 second. Because
* the LED is toggled each time this function is called, the LED will blink at
* a rate of once every 2 seconds.
*/
void timerCallback(Timer_Handle myHandle, int_fast16_t status)
{
GPIO_toggle(CONFIG_GPIO_LED_0);
GpioState = GPIO_read(CONFIG_GPIO_LED_0);
counter++;
}


但当我进入 GPIO_Read 函数时、可以看到它正在从 GPIO DIN 寄存器读取、但该寄存器在写入或切换后不会更新