目前还没开放RDK X5的芯片数据手册等资料,我这边有一个GPIO驱动开发的需求,其目的是通过40PIN GPIO来驱动自动化设备的外围硬件,例如限位开关、步进电机等等。
之前程序都是基于香橙派(全志H3芯片)开发的驱动程序,现在需要官方协助提供相关的芯片数据信息:
// ARISC CPU频率定义(450MHz)
#define ARISC_CPU_FREQ 450000000 // Hz
// ARISC固件在内存中的基地址(对ARM CPU来说是0x00040000)
#define ARISC_FW_BASE (0x00040000)
// ARISC固件大小定义(48KB = (8+8+32)*1024)
#define ARISC_FW_SIZE ((8+8+32)*1024)
// 共享内存大小定义(4KB)
#define ARISC_SHM_SIZE (4096)
// 共享内存基地址(位于固件末尾)
#define ARISC_SHM_BASE (ARISC_FW_BASE + ARISC_FW_SIZE - ARISC_SHM_SIZE)
// GPIO寄存器基地址
#define GPIO_BASE 0x01c20800
// GPIO-R组寄存器基地址(通常用于电源管理)
#define GPIO_R_BASE 0x01f02c00
// 每个GPIO端口组(bank)的寄存器大小
#define GPIO_BANK_SIZE 0x24
// 最大GPIO端口组数量
#define GPIO_PORTS_MAX_CNT 8
// 每个端口组最大引脚数量
#define GPIO_PINS_MAX_CNT 24
// GPIO端口组枚举定义
enum { PA, PB, PC, PD, PE, PF, PG, PL }; // 定义所有可用的GPIO端口组
// GPIO端口寄存器结构体定义
typedef struct
{
uint32_t config[4]; // 引脚功能配置寄存器(每个引脚3位配置位)
uint32_t data; // 数据寄存器
uint32_t drive[2]; // 驱动能力配置寄存器
uint32_t pull[2]; // 上下拉配置寄存器
} _GPIO_PORT_REG_t;
// PWM最大通道数定义
#define PWM_CH_MAX_CNT 16
// PWM计算中浪费的ARISC时钟周期数(160/2)
#define PWM_WASTED_TICKS (160/2)
为方便你们查阅具体配置信息的作用,我下面附上了相应的程序,已经最大化增加了每一行的中文注释,详见附件两个程序源码。