# ISMBB驱动设计
| 时间 | 修订人 | 版本号 | 补充说明 |
| --- | --- | --- | --- |
| 2023-08-14 | 王培鑫 | v1.0.0 | |
# 1 工程介绍
## 1.1 模块位置
ISMBB位于APUS项目中的./drivers目录;目前包含的子模块有:
* arch:仿照蓝牙,目前实现了assert断言处理
* common:buffer、链表结构管理
* dma:DMA
* intc:中断处理
* ip:包含IP和Driver
* rf:射频管理


## 1.2 编译方法
* make apus\_fpga\_1v_defconfig // 选择APUS工程配置
* make menuconfig // 勾选编译ISMBB模块
* make autoconf
* make ismbb // 编译ISMBB模块
* make // 编译APUS工程,得到gxscpu.elf可执行文件
# 2 运行流程
## 2.1 初始化

## 2.2 定时排帧

## 2.3 发射

## 2.4 连续发射(仅手动模式)
.png)
## 2.5 接收

## 2.6 连续接收(仅手动模式)
.png)
## 2.7 ACK收发(仅自动模式)
.png)
# 3 API和宏
| API | Parameter | Description |
| --- | --- | --- |
| gx\_ismbb\_tx\_data\_write | uint16_t length
void* payload | 写数据接口,输入参数为待发射数据长度和内容。
为待发射的数据分配TX buffer后存放在TX queue中,等待发射。 |
| gx\_ismbb\_rx\_data\_read | uint8\_t* prefix\_id
uint16_t* length
void* payload | 读数据接口,输入参数为接收数据的RX id、长度和内容。
检查RX queue是否有数据接收,如有则将数据读出并释放RX buffer。 |
| ismbb\_rf\_tx_set | uint8_t channel
uint8_t gain | TX频点和射频增益设置接口,输入参数为信道号和射频增益值。
用于TX跳频实现。 |
| ismbb\_rf\_rx_set | uint8_t channel
uint8_t gain
uint8\_t gain\_mode | RX频点和射频增益设置接口,输入参数为信道号、射频增益值和增益模式(L/M/H)。低中频系统设计,RX频点 = TX频点 - 2M。
用于RX跳频实现。 |
| 宏 | Description |
| --- | --- |
| DMA_SUPPORT | 控制发射或接收是否使能DMA。 |
| ISMBB\_BUF\_MALLOC | 控制TX和RX buffer是否通过malloc分配。 |
| DEFAULT\_TX\_INTV
DEFAULT\_RX\_INTV | 控制定时器TX和RX排帧间隔时间。 |