Implement api docking of rt_pin_get. (#6102)
* Implement api docking of rt_pin_get.
This commit is contained in:
parent
8275e90203
commit
8f09245ed5
@ -6,6 +6,7 @@
|
|||||||
* Change Logs:
|
* Change Logs:
|
||||||
* Date Author Notes
|
* Date Author Notes
|
||||||
* 2018-4-30 misonyo the first version.
|
* 2018-4-30 misonyo the first version.
|
||||||
|
* 2022-6-22 solar Implement api docking of rt_pin_get.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <rtthread.h>
|
#include <rtthread.h>
|
||||||
@ -20,6 +21,8 @@
|
|||||||
#define LOG_TAG "drv.gpio"
|
#define LOG_TAG "drv.gpio"
|
||||||
#include <drv_log.h>
|
#include <drv_log.h>
|
||||||
|
|
||||||
|
#define IMX_PIN_NUM(port, no) (((((port) & 0x5u) << 5) | ((no) & 0x1Fu)))
|
||||||
|
|
||||||
#if defined(FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL) && FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL
|
#if defined(FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL) && FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL
|
||||||
#error "Please don't define 'FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL'!"
|
#error "Please don't define 'FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL'!"
|
||||||
#endif
|
#endif
|
||||||
@ -758,6 +761,45 @@ static rt_err_t imxrt_pin_irq_enable(struct rt_device *device, rt_base_t pin, rt
|
|||||||
|
|
||||||
return RT_EOK;
|
return RT_EOK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Example of use: Px.0 ~ Px.31, x:1,2,3,4,5 */
|
||||||
|
static rt_base_t imxrt_pin_get(const char *name)
|
||||||
|
{
|
||||||
|
rt_base_t pin = 0;
|
||||||
|
int hw_port_num, hw_pin_num = 0;
|
||||||
|
int i, name_len;
|
||||||
|
|
||||||
|
name_len = rt_strlen(name);
|
||||||
|
|
||||||
|
if ((name_len < 4) || (name_len >= 6))
|
||||||
|
{
|
||||||
|
return -RT_EINVAL;
|
||||||
|
}
|
||||||
|
if ((name[0] != 'P') || (name[2] != '.'))
|
||||||
|
{
|
||||||
|
return -RT_EINVAL;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((name[1] >= '1') && (name[1] <= '5'))
|
||||||
|
{
|
||||||
|
hw_port_num = (int)(name[1] - '1');
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return -RT_EINVAL;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (i = 3; i < name_len; i++)
|
||||||
|
{
|
||||||
|
hw_pin_num *= 10;
|
||||||
|
hw_pin_num += name[i] - '0';
|
||||||
|
}
|
||||||
|
|
||||||
|
pin = IMX_PIN_NUM(hw_port_num, hw_pin_num);
|
||||||
|
|
||||||
|
return pin;
|
||||||
|
}
|
||||||
|
|
||||||
const static struct rt_pin_ops imxrt_pin_ops =
|
const static struct rt_pin_ops imxrt_pin_ops =
|
||||||
{
|
{
|
||||||
imxrt_pin_mode,
|
imxrt_pin_mode,
|
||||||
@ -766,7 +808,7 @@ const static struct rt_pin_ops imxrt_pin_ops =
|
|||||||
imxrt_pin_attach_irq,
|
imxrt_pin_attach_irq,
|
||||||
imxrt_pin_detach_irq,
|
imxrt_pin_detach_irq,
|
||||||
imxrt_pin_irq_enable,
|
imxrt_pin_irq_enable,
|
||||||
RT_NULL,
|
imxrt_pin_get,
|
||||||
};
|
};
|
||||||
|
|
||||||
int rt_hw_pin_init(void)
|
int rt_hw_pin_init(void)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user