322 lines
8.0 KiB
C
322 lines
8.0 KiB
C
#ifndef ASM_GPIO_H
|
||
#define ASM_GPIO_H
|
||
|
||
#ifdef __cplusplus
|
||
extern "C" {
|
||
#endif
|
||
|
||
#include "asm/gpio.h"
|
||
|
||
/// \cond DO_NOT_DOCUMENT
|
||
#define GPIO2PORT(gpio) (gpio / IO_GROUP_NUM)
|
||
/// \endcond
|
||
|
||
/**
|
||
* @brief gpio_port_lock,自旋锁,即不能被另一个cpu打断,也不能被中断打断
|
||
*
|
||
* @param gpio 参考宏IO_PORTx_xx,如IO_PORTA_00
|
||
*
|
||
*/
|
||
void gpio_port_lock(unsigned int port);
|
||
|
||
|
||
/**
|
||
* @brief gpio_port_unlock,解除自旋锁
|
||
*
|
||
* @param gpio 参考宏IO_PORTx_xx,如IO_PORTA_00
|
||
*/
|
||
void gpio_port_unlock(unsigned int port);
|
||
|
||
|
||
/**
|
||
* @brief gpio_direction_input,将引脚直接设为输入模式
|
||
*
|
||
* @param gpio 参考宏IO_PORTx_xx,如IO_PORTA_00
|
||
*
|
||
* @return 0:成功 非0:失败
|
||
*/
|
||
/// \cond DO_NOT_DOCUMENT
|
||
int __gpio_direction_input(unsigned int gpio);
|
||
/// \endcond
|
||
int gpio_direction_input(unsigned int gpio);
|
||
|
||
|
||
/**
|
||
* @brief gpio_direction_output,设置引脚的方向为输出,并设置一下电平
|
||
*
|
||
* @param gpio 参考宏IO_PORTx_xx,如IO_PORTA_00
|
||
* @param value 1,输出1, 0,输出0
|
||
*
|
||
* @return 0:成功 非0:失败
|
||
*/
|
||
/// \cond DO_NOT_DOCUMENT
|
||
int __gpio_direction_output(unsigned int gpio, int value);
|
||
/// \endcond
|
||
int gpio_direction_output(unsigned int gpio, int value);
|
||
|
||
|
||
/**
|
||
* @brief gpio_set_pull_up,设置引脚的上拉,上拉电阻10K,当引脚为输入模式时才有效
|
||
*
|
||
* @param gpio 参考宏IO_PORTx_xx,如IO_PORTA_00
|
||
* @param value 1,上拉;0,不上拉
|
||
*
|
||
* @return 0:成功 非0:失败
|
||
*/
|
||
/// \cond DO_NOT_DOCUMENT
|
||
int __gpio_set_pull_up(unsigned int gpio, int value);
|
||
/// \endcond
|
||
int gpio_set_pull_up(unsigned int gpio, int value);
|
||
|
||
|
||
/**
|
||
* @brief gpio_set_pull_down,设置引脚的下拉,下拉电阻10K,当引脚为输入模式时才有效
|
||
*
|
||
* @param gpio 参考宏IO_PORTx_xx,如IO_PORTA_00
|
||
* @param value 1,下拉;0,不下拉
|
||
*
|
||
* @return 0:成功 非0:失败
|
||
*/
|
||
/// \cond DO_NOT_DOCUMENT
|
||
int __gpio_set_pull_down(unsigned int gpio, int value);
|
||
/// \endcond
|
||
int gpio_set_pull_down(unsigned int gpio, int value);
|
||
|
||
|
||
/**
|
||
* @brief gpio_set_hd, 设置引脚的内阻,当引脚为输出模式时才有效
|
||
*
|
||
* @param gpio 参考宏IO_PORTx_xx,如IO_PORTA_00
|
||
* @param value 1,关闭内阻增强输出 0,存在内阻,芯片默认的
|
||
*
|
||
* @return 0:成功 非0:失败
|
||
*/
|
||
/// \cond DO_NOT_DOCUMENT
|
||
int __gpio_set_hd(unsigned int gpio, int value);
|
||
/// \endcond
|
||
int gpio_set_hd(unsigned int gpio, int value);
|
||
|
||
|
||
/**
|
||
* @brief gpio_set_hd1, 设置引脚的输出电流,当引脚为输出模式时才有效
|
||
*
|
||
* @param gpio 参考宏IO_PORTx_xx,如IO_PORTA_00
|
||
* @param value 1,电流变大增强输出; 0,默认电流
|
||
*
|
||
* @return 0:成功 非0:失败
|
||
*/
|
||
int gpio_set_hd1(unsigned int gpio, int value);
|
||
|
||
|
||
/**
|
||
* @brief gpio_set_die,设置引脚为数字功能还是模拟功能,比如引脚作为ADC的模拟输入,则die要置0
|
||
*
|
||
* @param gpio 参考宏IO_PORTx_xx,如IO_PORTA_00
|
||
* @param value 1,数字功能,即01信号; 0,跟电压先关的模拟功能
|
||
*
|
||
* @return 0:成功 非0:失败
|
||
*/
|
||
/// \cond DO_NOT_DOCUMENT
|
||
int __gpio_set_die(unsigned int gpio, int value);
|
||
/// \endcond
|
||
int gpio_set_die(unsigned int gpio, int value);
|
||
|
||
/// \cond DO_NOT_DOCUMENT
|
||
int __gpio_set_output_clk(unsigned int gpio, int clk);
|
||
/// \endcond
|
||
|
||
|
||
/**
|
||
* @brief gpio_set_output_clk,将引脚设为时钟输出
|
||
*
|
||
* @param gpio 参考宏IO_PORTx_xx,如IO_PORTA_00
|
||
* @param clk 12,24分别是12M时钟和24M时钟,0是默认24M时钟
|
||
*
|
||
* @return 0:成功 非0:失败
|
||
*/
|
||
int gpio_set_output_clk(unsigned int gpio, int clk);
|
||
|
||
|
||
/**
|
||
* @brief gpio_clear_output_clk,清除引脚时钟输出
|
||
*
|
||
* @param gpio 参考宏IO_PORTx_xx,如IO_PORTA_00
|
||
* @param clk 12,24分别是12M时钟和24M时钟,0是默认24M时钟
|
||
*
|
||
* @return 0:成功 非0:失败
|
||
*/
|
||
int gpio_clear_output_clk(unsigned int gpio, int clk);
|
||
|
||
|
||
/**
|
||
* @brief gpio_read,读取引脚的输入电平,引脚为输入模式时才有效
|
||
*
|
||
* @param gpio 参考宏IO_PORTx_xx,如IO_PORTA_00
|
||
*
|
||
* @return 电平值
|
||
*/
|
||
/// \cond DO_NOT_DOCUMENT
|
||
int __gpio_read(unsigned int gpio);
|
||
/// \endcond
|
||
int gpio_read(unsigned int gpio);
|
||
|
||
/**
|
||
* @brief gpio_set_direction,设置引脚方向
|
||
*
|
||
* @param gpio 参考宏IO_PORTx_xx,如IO_PORTA_00
|
||
* @param dir 1,输入;0,输出
|
||
*
|
||
* @return 0:成功 非0:失败
|
||
*/
|
||
int gpio_set_direction(unsigned int gpio, unsigned int dir);
|
||
|
||
|
||
/**
|
||
* @brief gpio_latch_en,保持引脚电平,软硬件无法改变它,如需取消则再调用一次并把en设置为0
|
||
*
|
||
* @param gpio 参考宏IO_PORTx_xx,如IO_PORTA_00
|
||
* @param en 1,使能;0,取消使能
|
||
*/
|
||
void gpio_latch_en(unsigned int gpio, unsigned char en);
|
||
|
||
/**
|
||
* @brief gpio_set_dieh, 设置引脚为数字功能还是模拟功能,但模拟功能时,跟die的不一样而已
|
||
*
|
||
* @param gpio 参考宏IO_PORTx_xx,如IO_PORTA_00
|
||
* @param value 1,数字功能,即01信号; 0,跟电压先关的模拟功能
|
||
*
|
||
* @return 0:成功 非0:失败
|
||
*/
|
||
int gpio_set_dieh(unsigned int gpio, int value);
|
||
|
||
|
||
/**
|
||
* @brief gpio_set_output_channle, 将IO映射成特殊引脚
|
||
*
|
||
* @param gpio 参考宏IO_PORTx_xx,如IO_PORTA_00
|
||
* @param clk 参考枚举CHx_UTx_TX,如CH0_UT0_TX
|
||
*
|
||
* @return 0:成功 非0:失败
|
||
*/
|
||
unsigned int gpio_output_channle(unsigned int gpio, enum gpio_out_channle clk);
|
||
|
||
|
||
/**
|
||
* @brief gpio_clear_output_channle,取消将IO映射成特殊引脚
|
||
*
|
||
* @param gpio 参考宏IO_PORTx_xx,如IO_PORTA_00
|
||
* @param clk 参考枚举CHx_UTx_TX,如CH0_UT0_TX
|
||
*
|
||
* @return 0:成功 非0:失败
|
||
*/
|
||
unsigned int gpio_clear_output_channle(unsigned int gpio, enum gpio_out_channle clk);
|
||
|
||
/**
|
||
* @brief gpio_uart_rx_input,将引脚映射成RX脚
|
||
*
|
||
* @param gpio 参考宏IO_PORTx_xx,如IO_PORTA_00
|
||
* @param ut 0,1,2,分别代表串口0,1,2
|
||
* @param ch 0,1,2,3,分别代表input_channel0,1,2,3
|
||
*
|
||
* @return 0:成功 非0:失败
|
||
*/
|
||
unsigned int gpio_uart_rx_input(unsigned int gpio, unsigned int ut, unsigned int ch);
|
||
|
||
|
||
/**
|
||
* @brief gpio_close_uart0,关闭串口0
|
||
*
|
||
* @return 0:成功 非0:失败
|
||
*/
|
||
unsigned int gpio_close_uart0(void);
|
||
|
||
|
||
/**
|
||
* @brief gpio_close_uart1,关闭串口1
|
||
*
|
||
* @return 0:成功 非0:失败
|
||
*/
|
||
unsigned int gpio_close_uart1(void);
|
||
|
||
|
||
/**
|
||
* @brief gpio_close_uart2,关闭串口2
|
||
*
|
||
* @return 0:成功 非0:失败
|
||
*/
|
||
unsigned int gpio_close_uart2(void);
|
||
|
||
|
||
/**
|
||
* @brief gpio_set_uart0
|
||
*
|
||
* @param ch 0:3 选择对应IO wl82
|
||
* |ch|tx|rx|
|
||
* |- |- |- |
|
||
* |0|PA5_TX|PA6_RX|
|
||
* |1|PB1_TX|PB2_RX|
|
||
* |2|PA3_TX|PA4_RX|
|
||
* |3|PH0_TX|PH1_RX|
|
||
* |-1|关闭对应的IO口串口功能|no|
|
||
*
|
||
* @return
|
||
*/
|
||
unsigned int gpio_set_uart0(unsigned int ch);
|
||
|
||
|
||
/**
|
||
* @brief gpio_set_uart1
|
||
*
|
||
* @param ch 0:3 选择对应IO wl82
|
||
* |ch|tx|rx|
|
||
* |- |- |- |
|
||
* |0|PH6_TX|PH7_RX|
|
||
* |1|PC3_TX|PC4_RX|
|
||
* |2|PB3_TX|PB4_RX|
|
||
* |3|USBDP |USBDM |
|
||
* |-1|关闭对应的IO口串口功能|no|
|
||
*
|
||
* @return
|
||
*/
|
||
unsigned int gpio_set_uart1(unsigned int ch);
|
||
|
||
|
||
/**
|
||
* @brief gpio_set_uart2
|
||
*
|
||
* @param ch 0:3 选择对应IO wl82
|
||
* |ch|tx|rx|
|
||
* |- |- |- |
|
||
* |0|PH2_TX|PH3_RX|
|
||
* |1|PC9_TX|PC10_RX|
|
||
* |2|PB6_TX|PB7_RX|
|
||
* |3|PE0_TX|PE1_RX|
|
||
* |-1|关闭对应的IO口串口功能|no|
|
||
*
|
||
* @return
|
||
*/
|
||
unsigned int gpio_set_uart2(unsigned int ch);
|
||
|
||
|
||
/// \cond DO_NOT_DOCUMENT
|
||
/**
|
||
* @brief usb_iomode, usb引脚设为普通IO
|
||
*
|
||
* @param usb_id usb名称号,0是usb0,1是usb1
|
||
* @param enable 1,使能;0,关闭
|
||
*/
|
||
void usb_iomode(unsigned char usb_id, unsigned int enable);
|
||
|
||
unsigned int usb_set_direction(unsigned int gpio, unsigned int value);
|
||
unsigned int usb_output(unsigned int gpio, unsigned int value);
|
||
unsigned int usb_set_pull_up(unsigned int gpio, unsigned int value);
|
||
unsigned int usb_set_pull_down(unsigned int gpio, unsigned int value);
|
||
unsigned int usb_set_dieh(unsigned int gpio, unsigned int value);
|
||
unsigned int usb_set_die(unsigned int gpio, unsigned int value);
|
||
unsigned int usb_read(unsigned int gpio);
|
||
/// \endcond
|
||
#ifdef __cplusplus
|
||
}
|
||
#endif
|
||
#endif
|