1.移除未验证的组件和软件包。

This commit is contained in:
MacRsh
2023-09-16 23:37:34 +08:00
parent c226ec54c8
commit 2d4f07aaf7
21 changed files with 0 additions and 3771 deletions

View File

@@ -1,192 +0,0 @@
# PIN开发手册
----------
## 准备工作
1. 从[仓库](https://gitee.com/MacRsh/mr-library.git)获取最新的代码。
2. 整理文件仅保留必要的文件:
| 名称 | 描述 |
|:-----------|:-----|
| mr_library | |
| -device | 设备文件 |
| -driver | 驱动文件 |
| -include | 库头文件 |
| -src | 库源文件 |
3.`mrboard.h`中添加芯片头文件并为适配的芯片添加支持的宏BSP_GPIO_x。
4.`driver`目录中新建名为`drv_gpio.c``drv_gpio.h`,并添加版权信息:
```c
/*
* Copyright (c) 2023, mr-library Development Team
*
* SPDX-License-Identifier: Apache-2.0
*
* Change Logs:
* Date Author Notes
* 20xx-xx-xx name first version
*/
```
5. 启用`include/mrconfig.h`中的`MR_CONF_DEVICE`和`MR_CONF_PIN`。
6. 在`drv_gpio.h`中引用`device/pin/pin.h`(请按此格式引用路径)。
7. 在`drv_gpio.c`和`drv_gpio.h`中添加宏开关:
```c
#if (MR_CONF_PIN == MR_CONF_ENABLE)
```
----------
## 注册PIN设备
以CH32为例将前缀修改为适配的型号即可如果您有关于硬件的信息需要引入请在`mr_pin_device_add`函数`data`
参数中传入(注意使用模板时请去除中文注释):
```c
/* 定义pin驱动 */
static struct mr_pin pin_device;
/* 注册pin设备 */
mr_err_t ch32_gpio_init(void)
{
mr_err_t ret = MR_ERR_OK;
static struct mr_pin_ops ops =
{
ch32_pin_configure,
ch32_pin_write,
ch32_pin_read,
};
ret = mr_pin_device_add(&pin_device, "pin", &ops, MR_NULL);
MR_ASSERT(ret == MR_ERR_OK);
return MR_ERR_OK;
}
/* 导出到驱动自动初始化 */
AUTO_INIT_DRIVER_EXPORT(ch32_gpio_init);
```
在`drv_gpio.h`中声明此函数(方便未实现自动初始化时调用)。
## 适配PIN设备驱动
PIN设备接口原型:
```c
struct mr_pin_ops
{
mr_err_t (*configure)(mr_pin_t pin, struct mr_pin_config *config);
void (*write)(mr_pin_t pin, mr_uint16_t number, mr_uint8_t value);
mr_uint8_t (*read)(mr_pin_t pin, mr_uint16_t number);
};
```
- configure:GPIO模式配置。
- write:写入GPIO电平。
- read:读取GPIO电平。
#### configure
```c
static mr_err_t ch32_pin_configure(mr_pin_t pin, struct mr_pin_config *config)
```
mr_pin_config原型
```c
struct mr_pin_config
{
mr_uint16_t number;
mr_uint8_t mode;
};
```
- number:GPIO引脚编号计算公式(端口号,引脚号) `->` ('A' - 端口号) * 16 + 引脚号,例如 B13 = 1 * 16 + 13 = 29。
- mode:GPIO模式如下
```c
/* GPIO 模式 */
#define
MR_PIN_MODE_NONE /* 关闭IO */
#define
MR_PIN_MODE_OUTPUT /* 推挽输出 */
#define
MR_PIN_MODE_OUTPUT_OD /* 开漏输出 */
#define
MR_PIN_MODE_INPUT /* 浮空输入 */
#define
MR_PIN_MODE_INPUT_DOWN /* 下拉输入 */
#define
MR_PIN_MODE_INPUT_UP /* 上拉输入 */
/* 中断模式 */
#define
MR_PIN_MODE_RISING /* 上升沿触发 */
#define
MR_PIN_MODE_FALLING /* 下降沿触发 */
#define
MR_PIN_MODE_EDGE /* 边缘触发 */
#define
MR_PIN_MODE_LOW /* 低电平触发 */
#define
MR_PIN_MODE_HIGH /* 高电平触发 */
````
注意模式配置时请定义一个数组用于存储外部中断源是哪个GPIO-1代表未被占用。
```c
static mr_int32_t mask[16] = {-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1};
```
#### write
```c
static void ch32_pin_write(mr_pin_t pin, mr_uint16_t number, mr_uint8_t value)
```
- number:GPIO引脚编号。
- value:GPIO电平。
#### read
```c
static mr_uint8_t ch32_pin_read(mr_pin_t pin, mr_uint16_t number)
```
- number:GPIO引脚编号。
- returnGPIO电平。
#### 中断回调函数
以CH32为例在中断中调用以下函数完成框架对中断的接管
```c
void mr_pin_device_isr(mr_pin_t pin, mr_int32_t number)
```
- pin:PIN设备。
- number:触发中断的GPIO引脚编号。
```c
void EXTI0_IRQHandler(void)
{
if (EXTI_GetITStatus(EXTI_Line0) != RESET)
{
mr_pin_device_isr(&pin_device, mask[0]);
EXTI_ClearITPendingBit(EXTI_Line0);
}
}
```
## 发起PR感谢您做出的贡献。