K Standalone SDK 编程指南 KENDRYTE 勘智 嘉楠科技版权 2019 KENDRYTE.COM

Size: px
Start display at page:

Download "K Standalone SDK 编程指南 KENDRYTE 勘智 嘉楠科技版权 2019 KENDRYTE.COM"

Transcription

1 K Standalone SDK 编程指南 KENDRYTE 勘智 嘉楠科技版权 2019 KENDRYTE.COM

2 i 关于本手册 本文档为用户提供基于 Kendryte K210 Standalone SDK 开发时的编程指南. 对应 SDK 版本 Kendryte Standalone SDK v0.5.6 (9410af7ca bce9523dd2dab56ad2b8c243) 发布说明 日期 版本 发布说明 V0.1.0 初始版本 V0.2.0 发布对应 Standalone SDK v0.4.0 的文档 V0.3.0 发布对应 Standalone SDK v0.5.1 的文档 V0.4.0 发布对应 Standalone SDK v0.5.3 的文档 V0.5.0 发布对应 Standalone SDK v0.5.6 的文档 免责声明 本文中的信息, 包括参考的 URL 地址, 如有变更, 恕不另行通知 文档 按现状 提供, 不负任何担保责任, 包括对适销性 适用于特定用途或非侵权性的任何担保, 和任何提案 规格或样品在他处提到的任何担保 本文档不负任何责任, 包括使用本文档内信息产生的侵犯任何专利权行为的责任 本文档在此未以禁止反言或其他方式授予任何知识产权使用许可, 不管是明示许可还是暗示许可 文中提到的所有商标名称 商标和注册商标均属其各自所有者的财产, 特此声明 版权公告 版权归 2019 嘉楠科技所有 保留所有权利

3 ii 目录 关于本手册对应 SDK 版本 发布说明 免责声明 版权公告 i i i i i 第 1 章 神经网络处理器 (KPU) 概述 功能描述 API 参考 数据类型 第 2 章 麦克风阵列处理器 (APU) 概述 功能描述 API 参考 数据类型 第 3 章 高级加密加速器 (AES) 功能描述 API 参考 数据类型 第 4 章 中断 PLIC 概述 功能描述

4 目录 iii 4.3 API 参考 数据类型 第 5 章 通用输入 / 输出 (GPIO) 概述 功能描述 API 参考 数据类型 第 6 章 通用高速输入 / 输出 (GPIOHS) 概述 功能描述 API 参考 数据类型 第 7 章 现场可编程 IO 阵列 (FPIOA) 概述 功能描述 API 参考 数据类型 第 8 章 数字摄像头接口 (DVP) 概述 功能描述 API 参考 数据类型 第 9 章 快速傅里叶变换加速器 (FFT) 概述 功能描述 API 参考 数据类型 第 10 章 安全散列算法加速器 (SHA256) 功能描述 API 参考 例程 第 11 章 通用异步收发传输器 (UART) 124

5 目录 iv 11.1 概述 功能描述 API 参考 数据类型 第 12 章 高速通用异步收发传输器 (UARTHS) 概述 功能描述 API 参考 数据类型 第 13 章 看门狗定时器 (WDT) 概述 功能描述 API 参考 数据类型 第 14 章 直接内存存取控制器 (DMAC) 概述 功能描述 API 参考 数据类型 第 15 章 集成电路内置总线 (I²C) 概述 功能描述 API 参考 数据类型 第 16 章 串行外设接口 (SPI) 概述 功能描述 API 参考 数据类型 第 17 章 集成电路内置音频总线 (I2S) 概述 功能描述 API 参考

6 目录 v 17.4 数据类型 第 18 章 定时器 (TIMER) 概述 功能描述 API 参考 数据类型 第 19 章 实时时钟 (RTC) 概述 功能描述 API 参考 第 20 章 脉冲宽度调制器 (PWM) 概述 功能描述 API 参考 数据类型 第 21 章 系统控制 概述 功能描述 API 参考 数据类型 第 22 章 平台相关 (BSP) 概述 功能描述 API 参考 数据类型

7 1 第 1 章 神经网络处理器 (KPU) 1.1 概述 KPU 是通用的神经网络处理器, 它可以在低功耗的情况下实现卷积神经网络计算, 实时获取被检测目 标的大小 坐标和种类, 对人脸或者物体进行检测和分类 使用 kpu 时, 必须结合 model compiler 1.2 功能描述 KPU 具备以下几个特点 : 支持主流训练框架按照特定限制规则训练出来的定点化模型 对网络层数无直接限制, 支持每层卷积神经网络参数单独配置, 包括输入输出通道数目 输入输出行宽列高 支持两种卷积内核 1x1 和 3x3 支持任意形式的激活函数 实时工作时最大支持神经网络参数大小为 5.5MiB 到 5.9MiB 非实时工作时最大支持网络参数大小为 (Flash 容量 - 软件体积 ) 1.3 API 参考 对应的头文件 kpu.h 为用户提供以下接口 kpu_task_init (0.6.0 以后不再支持, 请使用 kpu_single_task_init) kpu_run (0.6.0 以后不再支持, 请使用 kpu_start) kpu_get_output_buf (0.6.0 以后不再支持 )

8 第 1 章神经网络处理器 (KPU) 2 kpu_release_output_buf (0.6.0 以后不再支持 ) kpu_start kpu_single_task_init kpu_single_task_deinit kpu_model_load_from_buffer kpu_load_kmodel kpu_model_free kpu_get_output kpu_run_kmodel kpu_task_init 描述 初始化 kpu 任务句柄, 该函数具体实现在 model compiler 生成的 gencode_output.c 中 函数定义 kpu_task_t kpu_task_init ( kpu_task_t task ) 参数 参数名称描述输入输出 task KPU 任务句柄输入 返回值 KPU 任务句柄 kpu_run 描述 启动 KPU, 进行 AI 运算 函数原型 int kpu_run ( kpu_task_t v_task, dmac_channel_number_t dma_ch, const void src, void dest, plic_irq_callback_t callback )

9 第 1 章神经网络处理器 (KPU) 参数 参数名称 描述 输入输出 task KPU 任务句柄 输入 dma_ch DMA 通道 输入 src 输入图像数据 输入 dest 运算输出结果 输出 callback 运算完成回调函数 输入 返回值 返回值 描述 0 成功 非 0 KPU 忙, 失败 kpu_get_output_buf 描述 获取 KPU 输出结果的缓存 函数原型 uint8_t kpu_get_output_buf ( kpu_task_t task ) 参数 参数名称描述输入输出 task KPU 任务句柄输入 返回值 KPU 输出结果的缓存的指针

10 第 1 章神经网络处理器 (KPU) kpu_release_output_buf 描述 释放 KPU 输出结果缓存 函数原型 void kpu_release_output_buf ( uint8_t output_buf ) 参数 参数名称描述输入输出 output_buf KPU 输出结果缓存输入 返回值 无 kpu_start 描述 启动 KPU, 进行 AI 运算 函数原型 int kpu_start ( kpu_task_t task ) 参数 参数名称描述输入输出 task KPU 任务句柄输入 返回值 返回值 描述 0 成功

11 第 1 章神经网络处理器 (KPU) 5 返回值 非 0 描述 KPU 忙, 失败 kpu_single_task_init 描述 初始化 kpu 任务句柄 函数原型 int kpu_single_task_init ( kpu_task_t task ) 参数 参数名称描述输入输出 task KPU 任务句柄输入 返回值 返回值 描述 0 成功 非 0 失败 kpu_single_task_deinit 描述 注销 kpu 任务 函数原型 int kpu_single_task_deinit ( kpu_task_t task ) 参数

12 第 1 章神经网络处理器 (KPU) 6 参数名称描述输入输出 task KPU 任务句柄输入 返回值 返回值 描述 0 成功 非 0 失败 kpu_model_load_from_buffer 描述 解析 kmodel 并初始化 kpu 句柄 函数原型 int kpu_model_load_from_buffer ( kpu_task_t task, uint8_t buffer, kpu_model_layer_metadata_t meta ); 参数 参数名称 描述 输入输出 task KPU 任务句柄 输入 buffer kmodel 数据 输入 meta 内部测试数据, 用户设置为 NULL 输出 返回值 返回值 描述 0 成功 非 0 失败

13 第 1 章 神经网络处理器 (KPU) kpu_load_kmodel 描述 加载 kmodel, 需要与 nncase 配合使用 函数原型 int kpu_load_kmodel ( kpu_model_context_t ctx, const uint8_t buffer ) 参数 参数名称描述输入输出 ctx KPU 任务句柄输入 buffer kmodel 数据输入 返回值 返回值 描述 0 成功 非 0 失败 kpu_model_free 描述 释放 kpu 资源 函数原型 void kpu_model_free ( kpu_model_context_t ctx ) 参数 参数名称描述输入输出 ctx KPU 任务句柄输入

14 第 1 章神经网络处理器 (KPU) 返回值 kpu_get_output 描述 获取 KPU 最终处理的结果 函数原型 int kpu_get_output ( kpu_model_context_t ctx, uint32_t index, uint8_t data, size_t size ) 参数 参数名称 描述 输入输出 ctx KPU 任务句柄 输入 index 结果的索引值, 如 kmodel 有关 输入 data 结果 输入 size 大小 ( 字节 ) 输入 返回值 返回值 描述 0 成功 非 0 失败 kpu_run_kmodel 描述 运行 kmodel 函数原型 int kpu_run_kmodel ( kpu_model_context_t ctx, const uint8_t src, dmac_channel_number_t dma_ch, kpu_done_callback_t done_callback, void userdata )

15 第 1 章神经网络处理器 (KPU) 参数 参数名称 描述 输入输出 ctx KPU 任务句柄 输入 src 源数据 输入 dma_ch DMA 通道 输入 done_callback 完成后回调函数 输入 userdata 回调的参数 输入 返回值 返回值 描述 0 成功 非 0 失败 举例 / 通过 MC 生成 kpu_task_gencode_output_init, 设置源数据为 g _ a i _ b u f, 使用 D M A 5,kpu 完成后调 用 ai_done 函数 / kpu_task_t task ; volatile uint8_t g_ai_done_flag ; static int ai_done ( void ctx) { g_ai_done_flag = 1; return 0; } / 初始化 kpu / kpu_task_gencode_output_init (& task ); / MC 生成的函数 / task. src = g_ai_buf ; task. dma_ch = 5; task. callback = ai_done ; kpu_single_task_init (& task ); / 启动 kpu / kpu_start (& task ); 1.4 数据类型 相关数据类型 数据结构定义如下 :

16 第 1 章神经网络处理器 (KPU) 10 kpu_task_t:kpu 任务结构体 kpu_task_t 描述 kpu 任务结构体 定义 typedef struct { kpu_layer_argument_t layers ; kpu_layer_argument_t remain_layers ; plic_irq_callback_t callback ; void ctx; uint64_t src; uint64_t dst; uint32_t src_length ; uint32_t dst_length ; uint32_t layers_length ; uint32_t remain_layers_length ; dmac_channel_number_t dma_ch ; uint32_t eight_bit_mode ; float output_scale ; float output_bias ; float input_scale ; float input_bias ; } kpu_task_t ; 成员 成员名称 描述 layers KPU 参数指针 (MC 初始化, 用户不必关心 ) remain_layers KPU 参数指针 ( 运算过程中使用, 用户不必关心 ) callback 运算完成回调函数 ( 需要用户设置 ) ctx 回调函数的参数 ( 非空需要用户设置 ) src 运算源数据 ( 需要用户设置 ) dst 运算结果输出指针 (KPU 初始化赋值, 用户不必关心 ) src_length 源数据长度 (MC 初始化, 用户不必关心 ) dst_length 运算结果长度 (MC 初始化, 用户不必关心 ) layers_length 层数 (MC 初始化, 用户不必关心 ) remain_layers_length 剩余层数 ( 运算过程中使用, 用户不必关心 )

17 第 1 章神经网络处理器 (KPU) 11 成员名称 描述 dma_ch 使用的 DMA 通道号 ( 需要用户设置 ) eight_bit_mode 是否是 8 比特模式 (MC 初始化, 用户不必关心 ) output_scale 输出 scale 值 (MC 初始化, 用户不必关心 ) output_bias 输出 bias 值 (MC 初始化, 用户不必关心 ) input_scale 输入 scale 值 (MC 初始化, 用户不必关心 ) input_bias 输入 bias 值 (MC 初始化, 用户不必关心 )

18 12 第 2 章 麦克风阵列处理器 (APU) 2.1 概述 APU 麦克风阵列语音数据加速计算处理器, 能够实时计算不同方向的语音延时累加值, 通过这个值来 判断语音方向, 以及选取某一方向的增强语音数据 2.2 功能描述 APU 具备以下几个特点 : 支持最多八个麦克风的数据 可以实时计算 16 个方向的语音延时累加值 支持选定方向的增强语音输出 2.3 API 参考 对应的头文件 apu.h 为用户提供以下接口 audio_bf_dir_set_prev_fir audio_bf_dir_set_post_fir audio_bf_voc_set_prev_fir audio_bf_voc_set_post_fir audio_bf_set_delay audio_bf_voc_set_direction audio_bf_set_channel_enabled

19 第 2 章麦克风阵列处理器 (APU) 13 audio_bf_dir_enable audio_bf_voc_enable audio_bf_dir_set_prev_fir 描述 在计算各个方向的延时累加值之前的 fir 滤波系数 函数定义 void audio_bf_dir_set_prev_fir ( uint16_t fir_coef ) 参数 参数名称描述输入输出 fir_coef 17 位滤波系数指针输入 返回值 audio_bf_dir_set_post_fir 描述 在计算各个方向的延时累加值之后的 fir 滤波系数 函数原型 void audio_bf_dir_set_post_fir ( uint16_t fir_coef ) 参数 参数名称描述输入输出 fir_coef 17 位滤波系数指针输入

20 第 2 章麦克风阵列处理器 (APU) 返回值 audio_bf_voc_set_prev_fir 描述 在计算选定方向的延时累加值之前的 fir 滤波系数 函数原型 void audio_bf_voc_set_prev_fir ( uint16_t fir_coef ) 参数 参数名称描述输入输出 fir_coef 17 位滤波系数指针输入 返回值 audio_bf_voc_set_post_fir 描述 在计算选定方向的延时累加值之后的 fir 滤波系数 函数原型 void audio_bf_voc_set_post_fir ( uint16_t fir_coef ) 参数 参数名称描述输入输出 fir_coef 17 位滤波系数指针输入 返回值

21 第 2 章麦克风阵列处理器 (APU) audio_bf_set_delay 描述 初始化圆形麦克风阵列板子上麦克风之间的声波延时参数 函数原型 void audio_bf_set_delay ( float R, uint8_t mic_num_a_circle, uint8_t center, float I2s_fs ) 参数 参数名称 描述 输入输出 R 麦克风围成的圆半径 输入 micnuma_circle 在圆周上的麦克风个数 输入 center 圆心点上是否有麦克风 输入 I2s_fs 麦克风采样率 输入 返回值 audio_bf_voc_set_direction 描述 选择语音增强的方向 函数原型 void audio_bf_voc_set_direction ( enum en_bf_dir direction ) 参数 参数名称描述输入输出 direction 选择语音增强的方向, 取 0~15 输入

22 第 2 章麦克风阵列处理器 (APU) 返回值 audio_bf_set_channel_enabled 描述 选择使用的麦克风通道,I2S 可用 4 路, 每路有左右声道, 共 8 个通道, 相应位为 1, 则选择使用这 个通道 函数原型 void audio_bf_set_channel_enabled ( uint8_t channel_bit ) 参数 参数名称描述输入输出 channel_bit 相应位为 1, 则选择使用这个通道 输入 返回值 audio_bf_dir_enable 描述 使能各个方向的延时累加计算 函数原型 void audio_bf_dir_enable ( void ) 参数 返回值

23 第 2 章麦克风阵列处理器 (APU) audio_bf_voc_enable 描述 使能选定方向的延时累加计算 函数原型 void audio_bf_voc_enable ( uint8_t enable_flag ) 参数 返回值 举例 uint16_t fir_prev_t [17] = { 0x8000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; audio_bf_dir_set_prev_fir ( fir_prev_t ); audio_bf_dir_set_post_fir ( fir_post_t ); audio_bf_voc_set_prev_fir ( fir_prev_t ); audio_bf_voc_set_post_fir ( fir_post_t ); audio_bf_set_delay (3, 7, 1, 44100); audio_bf_voc_set_direction (0); audio_bf_set_channel_enabled (0 xff ); audio_bf_dir_enable (); audio_bf_voc_enable (1); 2.4 数据类型 相关数据类型 数据结构定义如下 : apu_reg_t:apu 任务结构体

24 第 2 章麦克风阵列处理器 (APU) apu_reg_t 描述 kpu 任务结构体 定义 typedef struct _apu_reg { //0 x200 apu_ch_cfg_t bf_ch_cfg_reg ; //0 x204 apu_ctl_t bf_ctl_reg ; //0 x208 apu_dir_bidx_t bf_dir_bidx [16][2]; //0 x288 apu_fir_coef_t bf_pre_fir0_coef [9]; //0 x2ac apu_fir_coef_t bf_post_fir0_coef [9]; //0 x2d0 apu_fir_coef_t bf_pre_fir1_coef [9]; //0 x2f4 apu_fir_coef_t bf_post_fir1_coef [9]; //0 x318 apu_dwsz_cfg_t bf_dwsz_cfg_reg ; //0 x31c apu_fft_cfg_t bf_fft_cfg_reg ; // 0 x320 volatile uint32_t sobuf_dma_rdata ; // 0 x324 volatile uint32_t vobuf_dma_rdata ; / 0 x328 / apu_int_stat_t bf_int_stat_reg ; / 0 x32c / apu_int_mask_t bf_int_mask_reg ; / 0 x330 / uint32_t saturation_counter ; / 0 x334 / uint32_t saturation_limits ; } attribute (( packed, aligned (4))) apu_reg_t ; 成员 成员名称 bf_ch_cfg_reg bf_ctl_reg 描述 通道配置 控制寄存器

25 第 2 章麦克风阵列处理器 (APU) 19 成员名称 bf_dir_bidx[16][2] bf_pre_fir0_coef[9] bf_post_fir0_coef[9] bf_pre_fir1_coef[9] bf_post_fir1_coef[9] bf_dwsz_cfg_reg bf_fft_cfg_reg sobuf_dma_rdata vobuf_dma_rdata bf_int_stat_reg bf_int_mask_reg saturation_counter saturation_limits 描述各个方向延时累加计算前滤波系数各个方向延时累加计算后滤波系数计算选定方向延时累加值之前滤波系数计算选定方向延时累加值之后滤波系数下采样系数 fft 控制寄存器方向数据源地址选定方向数据源地址中断状态寄存器中断选定寄存器

26 20 第 3 章 高级加密加速器 (AES) 3.1 功能描述 K210 内置 AES( 高级加密加速器 ), 相对于软件可以极大的提高 AES 运算速度 AES 加速器支持多种加 密 / 解密模式 (ECB,CBC,GCM), 多种长度的 KEY(128,192,256) 的运算 3.2 API 参考 对应的头文件 aes.h 为用户提供以下接口 aes_ecb128_hard_encrypt aes_ecb128_hard_decrypt aes_ecb192_hard_encrypt aes_ecb192_hard_decrypt aes_ecb256_hard_encrypt aes_ecb256_hard_decrypt aes_cbc128_hard_encrypt aes_cbc128_hard_decrypt aes_cbc192_hard_encrypt aes_cbc192_hard_decrypt aes_cbc256_hard_encrypt aes_cbc256_hard_decrypt aes_gcm128_hard_encrypt aes_gcm128_hard_decrypt aes_gcm192_hard_encrypt

27 第 3 章高级加密加速器 (AES) 21 aes_gcm192_hard_decrypt aes_gcm256_hard_encrypt aes_gcm256_hard_decrypt aes_ecb128_hard_encrypt_dma aes_ecb128_hard_decrypt_dma aes_ecb192_hard_encrypt_dma aes_ecb192_hard_decrypt_dma aes_ecb256_hard_encrypt_dma aes_ecb256_hard_decrypt_dma aes_cbc128_hard_encrypt_dma aes_cbc128_hard_decrypt_dma aes_cbc192_hard_encrypt_dma aes_cbc192_hard_decrypt_dma aes_cbc256_hard_encrypt_dma aes_cbc256_hard_decrypt_dma aes_gcm128_hard_encrypt_dma aes_gcm128_hard_decrypt_dma aes_gcm192_hard_encrypt_dma aes_gcm192_hard_decrypt_dma aes_gcm256_hard_encrypt_dma aes_gcm256_hard_decrypt_dma aes_init aes_process gcm_get_tag aes_ecb128_hard_encrypt 描述 AES-ECB-128 加密运算 输入输出数据都使用 cpu 传输 ECB 加密将明文按照固定大小 16bytes 的块进行加密的, 块大小不足则进行填充 ECB 模式没有用到向量 函数原型 void aes_ecb128_hard_encrypt ( uint8_t input_key, uint8_t input_data, size_t input_len, uint8_t output_data )

28 第 3 章高级加密加速器 (AES) 参数 参数名称 描述 输入输出 input_key AES-ECB-128 加密的密钥 输入 input_data AES-ECB-128 待加密的明文 输入 数据 input_len AES-ECB-128 待加密明文数 输入 据的长度 output_data AES-ECB-128 加密运算后的结果存放在这个 buffer 这个 buffer 的大小需要保证 16bytes 对齐 输出 返回值 aes_ecb128_hard_decrypt 描述 AES-ECB-128 解密运算 输入输出数据都使用 cpu 传输 ECB 加密将明文按照固定大小 16bytes 的块进行加密的, 块大小不足则进行填充 ECB 模式没有用到向量 函数原型 void aes_ecb128_hard_decrypt ( uint8_t input_key, uint8_t input_data, size_t input_len, uint8_t output_data ) 参数 参数名称 描述 输入输出 input_key AES-ECB-128 解密的密钥 输入 input_data AES-ECB-128 待解密的密文 输入 数据 input_len AES-ECB-128 待解密密文数据的长度 输入

29 第 3 章高级加密加速器 (AES) 23 参数名称描述输入输出 output_data AES-ECB-128 解密运算后的结果存放在这个 buffer 这个 buffer 的大小需要保证 16bytes 对齐 输出 返回值 aes_ecb192_hard_encrypt 描述 AES-ECB-192 加密运算 输入输出数据都使用 cpu 传输 ECB 加密将明文按照固定大小 16bytes 的块进行加密的, 块大小不足则进行填充 ECB 模式没有用到向量 函数原型 void aes_ecb192_hard_encrypt ( uint8_t input_key, uint8_t input_data, size_t input_len, uint8_t output_data ) 参数 参数名称 描述 输入输出 input_key AES-ECB-192 加密的密钥 输入 input_data AES-ECB-192 待加密的明文 输入 数据 input_len AES-ECB-192 待加密明文数 输入 据的长度 output_data AES-ECB-192 加密运算后的结果存放在这个 buffer 这个 buffer 的大小需要保证 16bytes 对齐 输出 返回值

30 第 3 章高级加密加速器 (AES) aes_ecb192_hard_decrypt 描述 AES-ECB-192 解密运算 输入输出数据都使用 cpu 传输 ECB 加密将明文按照固定大小 16bytes 的块进行加密的, 块大小不足则进行填充 ECB 模式没有用到向量 函数原型 void aes_ecb192_hard_decrypt ( uint8_t input_key, uint8_t input_data, size_t input_len, uint8_t output_data ) 参数 参数名称 描述 输入输出 input_key AES-ECB-192 解密的密钥 输入 input_data AES-ECB-192 待解密的密文 输入 数据 input_len AES-ECB-192 待解密密文数 输入 据的长度 output_data AES-ECB-192 解密运算后的结果存放在这个 buffer 这个 buffer 的大小需要保证 16bytes 对齐 输出 返回值 aes_ecb256_hard_encrypt 描述 AES-ECB-256 加密运算 输入输出数据都使用 cpu 传输 ECB 加密将明文按照固定大小 16bytes 的块进行加密的, 块大小不足则进行填充 ECB 模式没有用到向量 函数原型

31 第 3 章高级加密加速器 (AES) 25 void aes_ecb256_hard_encrypt ( uint8_t input_key, uint8_t input_data, size_t input_len, uint8_t output_data ) 参数 参数名称 描述 输入输出 input_key AES-ECB-256 加密的密钥 输入 input_data AES-ECB-256 待加密的明文 输入 数据 input_len AES-ECB-256 待加密明文数 输入 据的长度 output_data AES-ECB-256 加密运算后的结果存放在这个 buffer 这个 buffer 的大小需要保证 16bytes 对齐 输出 返回值 aes_ecb256_hard_decrypt 描述 AES-ECB-256 解密运算 输入输出数据都使用 cpu 传输 ECB 加密将明文按照固定大小 16bytes 的块进行加密的, 块大小不足则进行填充 ECB 模式没有用到向量 函数原型 void aes_ecb256_hard_decrypt ( uint8_t input_key, uint8_t input_data, size_t input_len, uint8_t output_data ) 参数 参数名称 描述 输入输出 input_key AES-ECB-256 解密的密钥 输入 input_data AES-ECB-256 待解密的密文数据 输入

32 第 3 章高级加密加速器 (AES) 26 参数名称描述输入输出 input_len output_data AES-ECB-256 待解密密文数据的长度 AES-ECB-256 解密运算后的结果存放在这个 buffer 这个 buffer 的大小需要保证 16bytes 对齐 输入 输出 返回值 aes_cbc128_hard_encrypt 描述 AES-CBC-128 加密运算 输入输出数据都使用 cpu 传输 CBC 加密将明文按照固定大小 16bytes 的块进行加密的, 块大小不足则进行填充 函数原型 void aes_cbc128_hard_encrypt ( cbc_context_t context, uint8_t input_data, size_t input_len, uint8_t output_data ) 参数 参数名称描述输入输出 context input_data input_len output_data AES-CBC-128 加密计算的结构体, 包含加密密钥与偏移向量 AES-CBC-128 待加密的明文数据 AES-CBC-128 待加密明文数据的长度 AES-CBC-128 加密运算后的结果存放在这个 buffer 这个 buffer 的大小需要保证 16bytes 对齐 输入输入输入输出

33 第 3 章高级加密加速器 (AES) 返回值 aes_cbc128_hard_decrypt 描述 AES-CBC-128 解密运算 输入输出数据都使用 cpu 传输 CBC 加密将明文按照固定大小 16bytes 的块进行加密的, 块大小不足则进行填充 函数原型 void aes_cbc128_hard_decrypt ( cbc_context_t context, uint8_t input_data, size_t input_len, uint8_t output_data ) 参数 参数名称描述输入输出 context input_data input_len output_data AES-CBC-128 解密计算的结构体, 包含解密密钥与偏移向量 AES-CBC-128 待解密的密文数据 AES-CBC-128 待解密密文数据的长度 AES-CBC-128 解密运算后的结果存放在这个 buffer 这个 buffer 的大小需要保证 16bytes 对齐 输入输入输入输出 返回值 aes_cbc192_hard_encrypt 描述 AES-CBC-192 加密运算 输入输出数据都使用 cpu 传输 CBC 加密将明文按照固定大小 16bytes 的块进行加密的, 块大小不足则进行填充

34 第 3 章高级加密加速器 (AES) 函数原型 void aes_cbc192_hard_encrypt ( cbc_context_t context, uint8_t input_data, size_t input_len, uint8_t output_data ) 参数 参数名称描述输入输出 context input_data input_len output_data AES-CBC-192 加密计算的结构体, 包含加密密钥与偏移向量 AES-CBC-192 待加密的明文数据 AES-CBC-192 待加密明文数据的长度 AES-CBC-192 加密运算后的结果存放在这个 buffer 这个 buffer 的大小需要保证 16bytes 对齐 输入输入输入输出 返回值 aes_cbc192_hard_decrypt 描述 AES-CBC-192 解密运算 输入输出数据都使用 cpu 传输 CBC 加密将明文按照固定大小 16bytes 的块进行加密的, 块大小不足则进行填充 函数原型 void aes_cbc192_hard_decrypt ( cbc_context_t context, uint8_t input_data, size_t input_len, uint8_t output_data ) 参数

35 第 3 章高级加密加速器 (AES) 29 参数名称描述输入输出 context input_data input_len output_data AES-CBC-192 解密计算的结构体, 包含解密密钥与偏移向量 AES-CBC-192 待解密的密文数据 AES-CBC-192 待解密密文数据的长度 AES-CBC-192 解密运算后的结果存放在这个 buffer 这个 buffer 的大小需要保证 16bytes 对齐 输入输入输入输出 返回值 aes_cbc256_hard_encrypt 描述 AES-CBC-256 加密运算 输入输出数据都使用 cpu 传输 CBC 加密将明文按照固定大小 16bytes 的块进行加密的, 块大小不足则进行填充 函数原型 void aes_cbc256_hard_encrypt ( cbc_context_t context, uint8_t input_data, size_t input_len, uint8_t output_data ) 参数 参数名称描述输入输出 context input_data input_len AES-CBC-256 加密计算的结构体, 包含加密密钥与偏移向量 AES-CBC-256 待加密的明文数据 AES-CBC-256 待加密明文数据的长度 输入 输入 输入

36 第 3 章高级加密加速器 (AES) 30 参数名称描述输入输出 output_data AES-CBC-256 加密运算后的结果存放在这个 buffer 这个 buffer 的大小需要保证 16bytes 对齐 输出 返回值 aes_cbc256_hard_decrypt 描述 AES-CBC-256 解密运算 输入输出数据都使用 cpu 传输 CBC 加密将明文按照固定大小 16bytes 的块进行加密的, 块大小不足则进行填充 函数原型 void aes_cbc256_hard_decrypt ( uint8_t input_key, uint8_t input_data, size_t input_len, uint8_t output_data ) 参数 参数名称描述输入输出 context input_data input_len output_data AES-CBC-256 解密计算的结构体, 包含解密密钥与偏移向量 AES-CBC-256 待解密的密文数据 AES-CBC-256 待解密密文数据的长度 AES-CBC-256 解密运算后的结果存放在这个 buffer 这个 buffer 的大小需要保证 16bytes 对齐 输入输入输入输出

37 第 3 章高级加密加速器 (AES) 返回值 aes_gcm128_hard_encrypt 描述 AES-GCM-128 加密运算 输入输出数据都使用 cpu 传输 函数原型 void aes_gcm128_hard_encrypt ( gcm_context_t context, uint8_t input_data, size_t input_len, uint8_t output_data, uint8_t gcm_tag ) 参数 参数名称 描述 输入输出 context AES-GCM-128 加密计算的结构体, 包含加密密钥 / 偏移向量 /aad/aad 长度 输入 input_data AES-GCM-128 待加密的明文数据 输入 input_len AES-GCM-128 待加密明文数据的长度 输入 output_data AES-GCM-128 加密运算后的结果存放在这个 buffer 输出 gcm_tag AES-GCM-128 加密运算后的 tag 存放在这个 buffer 这个 buffer 大小需要保证为 16bytes 输出 返回值 aes_gcm128_hard_decrypt 描述 AES-GCM-128 解密运算 输入输出数据都使用 cpu 传输 函数原型 void aes_gcm128_hard_decrypt ( gcm_context_t context, uint8_t input_data, size_t input_len, uint8_t output_data, uint8_t gcm_tag ) 参数

38 第 3 章高级加密加速器 (AES) 32 参数名称 描述 输入输出 context AES-GCM-128 解密计算的结构体, 包含解密密钥 / 偏移向量 /aad/aad 长度 输入 input_data AES-GCM-128 待解密的密文数据 输入 input_len AES-GCM-128 待解密密文数据的长度 输入 output_data AES-GCM-128 解密运算后的结果存放在这个 buffer 输出 gcm_tag AES-GCM-128 解密运算后的 tag 存放在这个 buffer 这个 buffer 大小需要保证为 16bytes 输出 返回值 aes_gcm192_hard_encrypt 描述 AES-GCM-192 加密运算 输入输出数据都使用 cpu 传输 函数原型 void aes_gcm192_hard_encrypt ( gcm_context_t context, uint8_t input_data, size_t input_len, uint8_t output_data, uint8_t gcm_tag ) 参数 参数名称 描述 输入输出 context AES-GCM-192 加密计算的结构体, 包含加密密钥 / 偏移向量 /aad/aad 长度 输入 input_data AES-GCM-192 待加密的明文数据 输入 input_len AES-GCM-192 待加密明文数据的长度 输入 output_data AES-GCM-192 加密运算后的结果存放在这个 buffer 输出 gcm_tag AES-GCM-192 加密运算后的 tag 存放在这个 buffer 这个 buffer 大小需要保证为 16bytes 输出 返回值 aes_gcm192_hard_decrypt 描述 AES-GCM-192 解密运算 输入输出数据都使用 cpu 传输

39 第 3 章高级加密加速器 (AES) 函数原型 void aes_gcm192_hard_decrypt ( gcm_context_t context, uint8_t input_data, size_t input_len, uint8_t output_data, uint8_t gcm_tag ) 参数 参数名称 描述 输入输出 context AES-GCM-192 解密计算的结构体, 包含解密密钥 / 偏移向量 /aad/aad 长度 输入 input_data AES-GCM-192 待解密的密文数据 输入 input_len AES-GCM-192 待解密密文数据的长度 输入 output_data AES-GCM-192 解密运算后的结果存放在这个 buffer 输出 gcm_tag AES-GCM-192 解密运算后的 tag 存放在这个 buffer 这个 buffer 大小需要保证为 16bytes 输出 返回值 aes_gcm256_hard_encrypt 描述 AES-GCM-256 加密运算 输入输出数据都使用 cpu 传输 函数原型 void aes_gcm256_hard_encrypt ( gcm_context_t context, uint8_t input_data, size_t input_len, uint8_t output_data, uint8_t gcm_tag ) 参数 参数名称 描述 输入输出 context AES-GCM-256 加密计算的结构体, 包含加密密钥 / 偏移向量 /aad/aad 长度 输入 input_data AES-GCM-256 待加密的明文数据 输入 input_len AES-GCM-256 待加密明文数据的长度 输入 output_data AES-GCM-256 加密运算后的结果存放在这个 buffer 输出 gcm_tag AES-GCM-256 加密运算后的 tag 存放在这个 buffer 这个 buffer 大小需要保证为 16bytes 输出

40 第 3 章高级加密加速器 (AES) 返回值 aes_gcm256_hard_decrypt 描述 AES-GCM-256 解密运算 输入输出数据都使用 cpu 传输 函数原型 void aes_gcm256_hard_decrypt ( gcm_context_t context, uint8_t input_data, size_t input_len, uint8_t output_data, uint8_t gcm_tag ) 参数 参数名称 描述 输入输出 context AES-GCM-256 解密计算的结构体, 包含解密密钥 / 偏移向量 /aad/aad 长度 输入 input_data AES-GCM-256 待解密的密文数据 输入 input_len AES-GCM-256 待解密密文数据的长度 输入 output_data AES-GCM-256 解密运算后的结果存放在这个 buffer 输出 gcm_tag AES-GCM-256 解密运算后的 tag 存放在这个 buffer 这个 buffer 大小需要保证为 16bytes 输出 返回值 aes_ecb128_hard_encrypt_dma 描述 AES-ECB-128 加密运算 输入数据使用 cpu 传输, 输出数据都使用 dma 传输 ECB 加密将明文按照固定大小 16bytes 的块进行加密的, 块大小不足则进行填充 ECB 模式没有用到向量 函数原型 void aes_ecb128_hard_encrypt_dma ( dmac_channel_number_t dma_receive_channel_num, uint8_t input_key, uint8_t input_data, size_t input_len, uint8_t output_data ) 参数

41 第 3 章高级加密加速器 (AES) 35 参数名称 描述 输入输出 dma_receive_channel_num AES 输出数据的 DMA 通道号 输入 input_key AES-ECB-128 加密的密钥 输入 input_data AES-ECB-128 待加密的明文 输入 数据 input_len AES-ECB-128 待加密明文数 输入 据的长度 output_data AES-ECB-128 加密运算后的结果存放在这个 buffer 这个 buffer 的大小需要保证 16bytes 对齐 输出 返回值 aes_ecb128_hard_decrypt_dma 描述 AES-ECB-128 解密运算 输入数据使用 cpu 传输, 输出数据都使用 dma 传输 ECB 加密将明文按照固定大小 16bytes 的块进行加密的, 块大小不足则进行填充 ECB 模式没有用到向量 函数原型 void aes_ecb128_hard_decrypt_dma ( dmac_channel_number_t dma_receive_channel_num, uint8_t input_key, uint8_t input_data, size_t input_len, uint8_t output_data ) 参数 参数名称 描述 输入输出 dma_receive_channel_num AES 输出数据的 DMA 通道号 输入 input_key AES-ECB-128 解密的密钥 输入 input_data AES-ECB-128 待解密的密文 输入 数据 input_len AES-ECB-128 待解密密文数据的长度 输入

42 第 3 章高级加密加速器 (AES) 36 参数名称描述输入输出 output_data AES-ECB-128 解密运算后的结果存放在这个 buffer 这个 buffer 的大小需要保证 16bytes 对齐 输出 返回值 aes_ecb192_hard_encrypt_dma 描述 AES-ECB-192 加密运算 输入数据使用 cpu 传输, 输出数据都使用 dma 传输 ECB 加密将明文按照固定大小 16bytes 的块进行加密的, 块大小不足则进行填充 ECB 模式没有用到向量 函数原型 void aes_ecb192_hard_encrypt_dma ( dmac_channel_number_t dma_receive_channel_num, uint8_t input_key, uint8_t input_data, size_t input_len, uint8_t output_data ) 参数 参数名称 描述 输入输出 dma_receive_channel_num AES 输出数据的 DMA 通道号 输入 input_key AES-ECB-192 加密的密钥 输入 input_data AES-ECB-192 待加密的明文 输入 数据 input_len AES-ECB-192 待加密明文数 输入 据的长度 output_data AES-ECB-192 加密运算后的结果存放在这个 buffer 这个 buffer 的大小需要保证 16bytes 对齐 输出 返回值

43 第 3 章高级加密加速器 (AES) aes_ecb192_hard_decrypt_dma 描述 AES-ECB-192 解密运算 输入数据使用 cpu 传输, 输出数据都使用 dma 传输 ECB 加密将明文按照固定大小 16bytes 的块进行加密的, 块大小不足则进行填充 ECB 模式没有用到向量 函数原型 void aes_ecb192_hard_decrypt_dma ( dmac_channel_number_t dma_receive_channel_num, uint8_t input_key, uint8_t input_data, size_t input_len, uint8_t output_data ) 参数 参数名称 描述 输入输出 dma_receive_channel_num AES 输出数据的 DMA 通道号 输入 input_key AES-ECB-192 解密的密钥 输入 input_data AES-ECB-192 待解密的密文 输入 数据 input_len AES-ECB-192 待解密密文数 输入 据的长度 output_data AES-ECB-192 解密运算后的结果存放在这个 buffer 这个 buffer 的大小需要保证 16bytes 对齐 输出 返回值 aes_ecb256_hard_encrypt_dma 描述 AES-ECB-256 加密运算 输入数据使用 cpu 传输, 输出数据都使用 dma 传输 ECB 加密将明文按照固定大小 16bytes 的块进行加密的, 块大小不足则进行填充 ECB 模式没有用到向量 函数原型

44 第 3 章高级加密加速器 (AES) 38 void aes_ecb256_hard_encrypt_dma ( dmac_channel_number_t dma_receive_channel_num, uint8_t input_key, uint8_t input_data, size_t input_len, uint8_t output_data ) 参数 参数名称 描述 输入输出 dma_receive_channel_num AES 输出数据的 DMA 通道号 输入 input_key AES-ECB-256 加密的密钥 输入 input_data AES-ECB-256 待加密的明文 输入 数据 input_len AES-ECB-256 待加密明文数 输入 据的长度 output_data AES-ECB-256 加密运算后的结果存放在这个 buffer 这个 buffer 的大小需要保证 16bytes 对齐 输出 返回值 aes_ecb256_hard_decrypt_dma 描述 AES-ECB-256 解密运算 输入数据使用 cpu 传输, 输出数据都使用 dma 传输 ECB 加密将明文按照固定大小 16bytes 的块进行加密的, 块大小不足则进行填充 ECB 模式没有用到向量 函数原型 void aes_ecb256_hard_decrypt_dma ( dmac_channel_number_t dma_receive_channel_num, uint8_t input_key, uint8_t input_data, size_t input_len, uint8_t output_data ) 参数 参数名称描述输入输出 dma_receive_channel_num AES 输出数据的 DMA 通道号输入 input_key AES-ECB-256 解密的密钥输入

45 第 3 章高级加密加速器 (AES) 39 参数名称描述输入输出 input_data input_len output_data AES-ECB-256 待解密的密文数据 AES-ECB-256 待解密密文数据的长度 AES-ECB-256 解密运算后的结果存放在这个 buffer 这个 buffer 的大小需要保证 16bytes 对齐 输入 输入 输出 返回值 aes_cbc128_hard_encrypt_dma 描述 AES-CBC-128 加密运算 输入数据使用 cpu 传输, 输出数据都使用 dma 传输 CBC 加密将明文按照固定大小 16bytes 的块进行加密的, 块大小不足则进行填充 函数原型 void aes_cbc128_hard_encrypt_dma ( dmac_channel_number_t dma_receive_channel_num, cbc_context_t context, uint8_t input_data, size_t input_len, uint8_t output_data ) 参数 参数名称 描述 输入输出 dma_receive_channel_num AES 输出数据的 DMA 通道号 输入 context AES-CBC-128 加密计算的结 输入 构体, 包含加密密钥与偏移向量 input_data AES-CBC-128 待加密的明文 输入 数据 input_len AES-CBC-128 待加密明文数据的长度 输入

46 第 3 章高级加密加速器 (AES) 40 参数名称描述输入输出 output_data AES-CBC-128 加密运算后的结果存放在这个 buffer 这个 buffer 的大小需要保证 16bytes 对齐 输出 返回值 aes_cbc128_hard_decrypt_dma 描述 AES-CBC-128 解密运算 输入数据使用 cpu 传输, 输出数据都使用 dma 传输 CBC 加密将明文按照固定大小 16bytes 的块进行加密的, 块大小不足则进行填充 函数原型 void aes_cbc128_hard_decrypt_dma ( dmac_channel_number_t dma_receive_channel_num, cbc_context_t context, uint8_t input_data, size_t input_len, uint8_t output_data ) 参数 参数名称 描述 输入输出 dma_receive_channel_num AES 输出数据的 DMA 通道号 输入 context AES-CBC-128 解密计算的结 输入 构体, 包含解密密钥与偏移向量 input_data AES-CBC-128 待解密的密文 输入 数据 input_len AES-CBC-128 待解密密文数 输入 据的长度 output_data AES-CBC-128 解密运算后的结果存放在这个 buffer 这个 buffer 的大小需要保证 16bytes 对齐 输出

47 第 3 章高级加密加速器 (AES) 返回值 aes_cbc192_hard_encrypt_dma 描述 AES-CBC-192 加密运算 输入数据使用 cpu 传输, 输出数据都使用 dma 传输 CBC 加密将明文按照固定大小 16bytes 的块进行加密的, 块大小不足则进行填充 函数原型 void aes_cbc192_hard_encrypt_dma ( dmac_channel_number_t dma_receive_channel_num, cbc_context_t context, uint8_t input_data, size_t input_len, uint8_t output_data ) 参数 参数名称 描述 输入输出 dma_receive_channel_num AES 输出数据的 DMA 通道号 输入 context AES-CBC-192 加密计算的结 输入 构体, 包含加密密钥与偏移向量 input_data AES-CBC-192 待加密的明文 输入 数据 input_len AES-CBC-192 待加密明文数 输入 据的长度 output_data AES-CBC-192 加密运算后的结果存放在这个 buffer 这个 buffer 的大小需要保证 16bytes 对齐 输出 返回值

48 第 3 章高级加密加速器 (AES) aes_cbc192_hard_decrypt_dma 描述 AES-CBC-192 解密运算 输入数据使用 cpu 传输, 输出数据都使用 dma 传输 CBC 加密将明文按照固定大小 16bytes 的块进行加密的, 块大小不足则进行填充 函数原型 void aes_cbc192_hard_decrypt_dma ( dmac_channel_number_t dma_receive_channel_num, cbc_context_t context, uint8_t input_data, size_t input_len, uint8_t output_data ) 参数 参数名称 描述 输入输出 dma_receive_channel_num AES 输出数据的 DMA 通道号 输入 context AES-CBC-192 解密计算的结 输入 构体, 包含解密密钥与偏移向量 input_data AES-CBC-192 待解密的密文 输入 数据 input_len AES-CBC-192 待解密密文数 输入 据的长度 output_data AES-CBC-192 解密运算后的结果存放在这个 buffer 这个 buffer 的大小需要保证 16bytes 对齐 输出 返回值 aes_cbc256_hard_encrypt_dma 描述 AES-CBC-256 加密运算 输入数据使用 cpu 传输, 输出数据都使用 dma 传输 CBC 加密将明文按照固定大小 16bytes 的块进行加密的, 块大小不足则进行填充

49 第 3 章高级加密加速器 (AES) 函数原型 void aes_cbc256_hard_encrypt_dma ( dmac_channel_number_t dma_receive_channel_num, cbc_context_t context, uint8_t input_data, size_t input_len, uint8_t output_data ) 参数 参数名称 描述 输入输出 dma_receive_channel_num AES 输出数据的 DMA 通道号 输入 context AES-CBC-256 加密计算的结 输入 构体, 包含加密密钥与偏移向量 input_data AES-CBC-256 待加密的明文 输入 数据 input_len AES-CBC-256 待加密明文数 输入 据的长度 output_data AES-CBC-256 加密运算后的结果存放在这个 buffer 这个 buffer 的大小需要保证 16bytes 对齐 输出 返回值 aes_cbc256_hard_decrypt_dma 描述 AES-CBC-256 解密运算 输入数据使用 cpu 传输, 输出数据都使用 dma 传输 CBC 加密将明文按照固定大小 16bytes 的块进行加密的, 块大小不足则进行填充 函数原型 void aes_cbc256_hard_decrypt_dma ( dmac_channel_number_t dma_receive_channel_num, uint8_t input_key, uint8_t input_data, size_t input_len, uint8_t output_data )

50 第 3 章高级加密加速器 (AES) 参数 参数名称 描述 输入输出 dma_receive_channel_num AES 输出数据的 DMA 通道号 输入 context AES-CBC-256 解密计算的结 输入 构体, 包含解密密钥与偏移向量 input_data AES-CBC-256 待解密的密文 输入 数据 input_len AES-CBC-256 待解密密文数 输入 据的长度 output_data AES-CBC-256 解密运算后的结果存放在这个 buffer 这个 buffer 的大小需要保证 16bytes 对齐 输出 返回值 aes_gcm128_hard_encrypt_dma 描述 AES-GCM-128 加密运算 输入数据使用 cpu 传输, 输出数据都使用 dma 传输 函数原型 void aes_gcm128_hard_encrypt_dma ( dmac_channel_number_t dma_receive_channel_num, gcm_context_t context, uint8_t input_data, size_t input_len, uint8_t output_data, uint8_t gcm_tag ) 参数 参数名称描述输入输出 dma_receive_channel_num AES 输出数据的 DMA 通道号输入

51 第 3 章高级加密加速器 (AES) 45 参数名称描述输入输出 context input_data input_len output_data gcm_tag AES-GCM-128 加密计算的结构体, 包含加密密钥 / 偏移向量 /aad/aad 长度 AES-GCM-128 待加密的明文数据 AES-GCM-128 待加密明文数据的长度 AES-GCM-128 加密运算后的结果存放在这个 buffer 由于 DMA 搬运数据的最小粒度为 4bytes, 所以需要保证这个 buffer 大小至少为 4bytes 的整数倍 AES-GCM-128 加密运算后的 tag 存放在这个 buffer 这个 buffer 大小需要保证为 16bytes 输入输入输入输出输出 返回值 aes_gcm128_hard_decrypt_dma 描述 AES-GCM-128 解密运算 输入数据使用 cpu 传输, 输出数据都使用 dma 传输 函数原型 void aes_gcm128_hard_decrypt_dma ( dmac_channel_number_t dma_receive_channel_num, gcm_context_t context, uint8_t input_data, size_t input_len, uint8_t output_data, uint8_t gcm_tag ) 参数

52 第 3 章高级加密加速器 (AES) 46 参数名称 描述 输入输出 dma_receive_channel_num AES 输出数据的 DMA 通道号 输入 context AES-GCM-128 解密计算的结 输入 构体, 包含解密密钥 / 偏移向量 /aad/aad 长度 input_data AES-GCM-128 待解密的密文 输入 数据 input_len AES-GCM-128 待解密密文数 输入 据的长度 output_data AES-GCM-128 解密运算后的 输出 结果存放在这个 buffer 由于 DMA 搬运数据的最小粒度为 4bytes, 所以需要保证这个 buffer 大小至少为 4bytes 的整数倍 gcm_tag AES-GCM-128 解密运算后的 tag 存放在这个 buffer 这个 buffer 大小需要保证为 16bytes 输出 返回值 aes_gcm192_hard_encrypt_dma 描述 AES-GCM-192 加密运算 输入数据使用 cpu 传输, 输出数据都使用 dma 传输 函数原型 void aes_gcm192_hard_encrypt_dma ( dmac_channel_number_t dma_receive_channel_num, gcm_context_t context, uint8_t input_data, size_t input_len, uint8_t output_data, uint8_t gcm_tag ) 参数

53 第 3 章高级加密加速器 (AES) 47 参数名称 描述 输入输出 dma_receive_channel_num AES 输出数据的 DMA 通道号 输入 context AES-GCM-192 加密计算的结 输入 构体, 包含加密密钥 / 偏移向量 /aad/aad 长度 input_data AES-GCM-192 待加密的明文 输入 数据 input_len AES-GCM-192 待加密明文数 输入 据的长度 output_data AES-GCM-192 加密运算后的 输出 结果存放在这个 buffer 由于 DMA 搬运数据的最小粒度为 4bytes, 所以需要保证这个 buffer 大小至少为 4bytes 的整数倍 gcm_tag AES-GCM-192 加密运算后的 tag 存放在这个 buffer 这个 buffer 大小需要保证为 16bytes 输出 返回值 aes_gcm192_hard_decrypt_dma 描述 AES-GCM-192 解密运算 输入数据使用 cpu 传输, 输出数据都使用 dma 传输 函数原型 void aes_gcm192_hard_decrypt_dma ( dmac_channel_number_t dma_receive_channel_num, gcm_context_t context, uint8_t input_data, size_t input_len, uint8_t output_data, uint8_t gcm_tag ) 参数

54 第 3 章高级加密加速器 (AES) 48 参数名称 描述 输入输出 dma_receive_channel_num AES 输出数据的 DMA 通道号 输入 context AES-GCM-192 解密计算的结 输入 构体, 包含解密密钥 / 偏移向量 /aad/aad 长度 input_data AES-GCM-192 待解密的密文 输入 数据 input_len AES-GCM-192 待解密密文数 输入 据的长度 output_data AES-GCM-192 解密运算后的 输出 结果存放在这个 buffer 由于 DMA 搬运数据的最小粒度为 4bytes, 所以需要保证这个 buffer 大小至少为 4bytes 的整数倍 gcm_tag AES-GCM-192 解密运算后的 tag 存放在这个 buffer 这个 buffer 大小需要保证为 16bytes 输出 返回值 aes_gcm256_hard_encrypt_dma 描述 AES-GCM-256 加密运算 输入数据使用 cpu 传输, 输出数据都使用 dma 传输 函数原型 void aes_gcm256_hard_encrypt_dma ( dmac_channel_number_t dma_receive_channel_num, gcm_context_t context, uint8_t input_data, size_t input_len, uint8_t output_data, uint8_t gcm_tag ) 参数

55 第 3 章高级加密加速器 (AES) 49 参数名称 描述 输入输出 dma_receive_channel_num AES 输出数据的 DMA 通道号 输入 context AES-GCM-256 加密计算的结 输入 构体, 包含加密密钥 / 偏移向量 /aad/aad 长度 input_data AES-GCM-256 待加密的明文 输入 数据 input_len AES-GCM-256 待加密明文数 输入 据的长度 output_data AES-GCM-256 加密运算后的 输出 结果存放在这个 buffer 由于 DMA 搬运数据的最小粒度为 4bytes, 所以需要保证这个 buffer 大小至少为 4bytes 的整数倍 gcm_tag AES-GCM-256 加密运算后的 tag 存放在这个 buffer 这个 buffer 大小需要保证为 16bytes 输出 返回值 aes_gcm256_hard_decrypt_dma 描述 AES-GCM-256 解密运算 输入数据使用 cpu 传输, 输出数据都使用 dma 传输 函数原型 void aes_gcm256_hard_decrypt_dma ( dmac_channel_number_t dma_receive_channel_num, gcm_context_t context, uint8_t input_data, size_t input_len, uint8_t output_data, uint8_t gcm_tag ) 参数

56 第 3 章高级加密加速器 (AES) 50 参数名称 描述 输入输出 dma_receive_channel_num AES 输出数据的 DMA 通道号 输入 context AES-GCM-256 解密计算的结 输入 构体, 包含解密密钥 / 偏移向量 /aad/aad 长度 input_data AES-GCM-256 待解密的密文 输入 数据 input_len AES-GCM-256 待解密密文数 输入 据的长度 output_data AES-GCM-256 解密运算后的 输出 结果存放在这个 buffer 由于 DMA 搬运数据的最小粒度为 4bytes, 所以需要保证这个 buffer 大小至少为 4bytes 的整数倍 gcm_tag AES-GCM-256 解密运算后的 tag 存放在这个 buffer 这个 buffer 大小需要保证为 16bytes 输出 返回值 aes_init 描述 AES 硬件模块的初始化 函数原型 void aes_init ( uint8_t input_key, size_t input_key_len, uint8_t iv, size_t iv_len, uint8_t gcm_aad, aes_cipher_mode_t cipher_mode, aes_encrypt_sel_t encrypt_sel, size_t gcm_aad_len, size_t input_data_len ) 参数

57 第 3 章高级加密加速器 (AES) 51 参数名称 描述 输入输出 input_key 待加密 / 解密的密钥 输入 input_key_len 待加密 / 解密密钥的长度 输入 iv AES 加密解密用到的 iv 数据 输入 iv_len AES 加密解密用到的 iv 数据的长度,CBC 固定为 16bytes,GCM 固定为 12bytes 输出 gcm_aad AES-GCM 加密解密用到的 aad 数据 输出 cipher_mode AES 硬件模块执行的加密解密类型, 支持 AES_CBC/AES_ECB/AES_GCM 输入 encrypt_sel AES 硬件模块执行的模式 : 加密或解密 输入 gcm_aad_len AES-GCM 加密解密用到的 aad 数据的长度 输入 input_data_len 待加密 / 解密的数据长度 输入 返回值 aes_process 描述 AES 硬件模块执行加密解密操作 函数原型 void aes_process ( uint8_t input_data, uint8_t output_data, size_t input_data_len, aes_cipher_mode_t cipher_mode ) 参数 参数名称 描述 输入输出 input_data 这个 buffer 存放待加密 / 解密的数据 输入 output_data 这个 buffer 存放加密 / 解密的输出结果 输出 input_data_len 待加密 / 解密的数据的长度 输入 cipher_mode AES 硬件模块执行的加密解密类型, 支持 AES_CBC/AES_ECB/AES_GCM 输入 返回值

58 第 3 章高级加密加速器 (AES) gcm_get_tag 描述 获取 AES-GCM 计算结束后的 tag 函数原型 void gcm_get_tag ( uint8_t gcm_tag ) 参数 参数名称描述输入输出 gcm_tag 这个 buffer 存放 AES-GCM 加密 / 解密后的 tag, 固定为 16bytes 的大小输出 返回值 举例 cbc_context_t cbc_context ; cbc_context. input_key = cbc_key ; cbc_context. iv = cbc_iv ; aes_cbc128_hard_encrypt (& cbc_context, aes_input_data, 16L, aes_output_data ); memcpy ( aes_input_data, aes_output_data, 16L); aes_cbc128_hard_decrypt (& cbc_context, aes_input_data, 16L, aes_output_data ); 3.3 数据类型 相关数据类型 数据结构定义如下 : aes_cipher_mode_t:aes 加密 / 解密的方式 aes_cipher_mode_t 描述 AES 加密 / 解密的方式

59 第 3 章高级加密加速器 (AES) 定义 typedef enum _aes_cipher_mode { AES_ECB = 0, AES_CBC = 1, AES_GCM = 2, AES_CIPHER_MAX } aes_cipher_mode_t ; gcm_context_t:aes-gcm 加密 / 解密时参数用到的结构体 gcm_context_t 描述 AES-GCM 参数用到的结构体, 包括密钥 偏移向量 aad 数据 aad 数据长度 定义 typedef struct _gcm_context { uint8_t input_key ; uint8_t iv; uint8_t gcm_aad ; size_t gcm_aad_len ; } gcm_context_t ; cbc_context_t:aes-cbc 加密 / 解密时参数用到的结构体 cbc_context_t 描述 AES-CBC 参数用到的结构体, 包括密钥 偏移向量 定义 typedef struct _cbc_context { uint8_t input_key ; uint8_t iv;

60 第 3 章高级加密加速器 (AES) 54 } cbc_context_t ; 成员 成员名称 AES_ECB AES_CBC AES_GCM 描述 ECB 加密 / 解密 CBC 加密 / 解密 GCM 加密 / 解密

61 55 第 4 章 中断 PLIC 4.1 概述 可以将任一外部中断源单独分配到每个 CPU 的外部中断上 这提供了强大的灵活性, 能适应不同的 应用需求 4.2 功能描述 PLIC 模块具有以下功能 : 启用或禁用中断 设置中断处理程序 配置中断优先级 4.3 API 参考 对应头文件 plic.h 为用户提供以下接口 plic_init plic_irq_enable plic_irq_disable plic_set_priority plic_get_priority plic_irq_register plic_irq_deregister

62 第 4 章中断 PLIC plic_init 描述 PLIC 初始化外部中断 函数原型 void plic_init ( void ) 参数 返回值 plic_irq_enable 描述 使能外部中断 函数原型 int plic_irq_enable ( plic_irq_t irq_number ) 参数 参数名称描述输入输出 irq_number 中断号输入 返回值 返回值 描述 0 成功 非 0 失败

63 第 4 章 中断 PLIC plic_irq_disable 描述 禁用外部中断 函数原型 int plic_irq_disable ( plic_irq_t irq_number ) 参数 参数名称描述输入输出 irq_number 中断号输入 返回值 返回值 描述 0 成功 非 0 失败 plic_set_priority 描述 设置中断优先级 函数原型 int plic_set_priority ( plic_irq_t irq_number, uint32_t priority ) 参数 参数名称描述输入输出 irq_number 中断号输入 priority 中断优先级输入

64 第 4 章中断 PLIC 返回值 返回值 描述 0 成功 非 0 失败 plic_get_priority 描述 获取中断优先级 函数原型 uint32_t plic_get_priority ( plic_irq_t irq_number ) 参数 参数名称描述输入输出 irq_number 中断号输入 返回值 irq_number 中断的优先级 plic_irq_register 描述 注册外部中断函数 函数原型 int plic_irq_register ( plic_irq_t irq, plic_irq_callback_t callback, void ctx ) 参数 参数名称描述输入输出 irq 中断号输入

65 第 4 章中断 PLIC 59 参数名称描述输入输出 callback 中断回调函数输入 ctx 回调函数的参数输入 返回值 返回值 描述 0 成功 非 0 失败 plic_irq_deregister 描述 注销外部中断函数 函数原型 int plic_irq_deregister ( plic_irq_t irq ) 参数 参数名称描述输入输出 irq 中断号输入 返回值 返回值 描述 0 成功 非 0 失败 举例 / 设置 GPIOHS0 的触发中断 / int count = 0; int gpiohs_pin_onchange_isr ( void ctx )

66 第 4 章中断 PLIC 60 { int userdata = ( int ) ctx; userdata ++; } plic_init (); plic_set_priority ( IRQN_GPIOHS0_INTERRUPT, 1); plic_irq_register ( IRQN_GPIOHS0_INTERRUPT, gpiohs_pin_onchange_isr, & count ); plic_irq_enable ( IRQN_GPIOHS0_INTERRUPT ); sysctl_enable_irq (); 4.4 数据类型 相关数据类型 数据结构定义如下 : plic_irq_t: 外部中断号 plic_irq_callback_t: 外部中断回调函数 plic_irq_t 描述 外部中断号 定义 typedef enum _plic_irq { IRQN_NO_INTERRUPT = 0, /!< The non - existent interrupt / IRQN_SPI0_INTERRUPT = 1, /!< SPI0 interrupt / IRQN_SPI1_INTERRUPT = 2, /!< SPI1 interrupt / IRQN_SPI_SLAVE_INTERRUPT = 3, /!< SPI_SLAVE interrupt / IRQN_SPI3_INTERRUPT = 4, /!< SPI3 interrupt / IRQN_I2S0_INTERRUPT = 5, /!< I2S0 interrupt / IRQN_I2S1_INTERRUPT = 6, /!< I2S1 interrupt / IRQN_I2S2_INTERRUPT = 7, /!< I2S2 interrupt / IRQN_I2C0_INTERRUPT = 8, /!< I2C0 interrupt / IRQN_I2C1_INTERRUPT = 9, /!< I2C1 interrupt / IRQN_I2C2_INTERRUPT = 10, /!< I2C2 interrupt / IRQN_UART1_INTERRUPT = 11, /!< UART1 interrupt / IRQN_UART2_INTERRUPT = 12, /!< UART2 interrupt / IRQN_UART3_INTERRUPT = 13, /!< UART3 interrupt / IRQN_TIMER0A_INTERRUPT = 14, /!< TIMER0 channel 0 or 1 interrupt / IRQN_TIMER0B_INTERRUPT = 15, /!< TIMER0 channel 2 or 3 interrupt / IRQN_TIMER1A_INTERRUPT = 16, /!< TIMER1 channel 0 or 1 interrupt / IRQN_TIMER1B_INTERRUPT = 17, /!< TIMER1 channel 2 or 3 interrupt / IRQN_TIMER2A_INTERRUPT = 18, /!< TIMER2 channel 0 or 1 interrupt / IRQN_TIMER2B_INTERRUPT = 19, /!< TIMER2 channel 2 or 3 interrupt /

67 第 4 章中断 PLIC 61 IRQN_RTC_INTERRUPT = 20, /!< RTC tick and alarm interrupt / IRQN_WDT0_INTERRUPT = 21, /!< Watching dog timer0 interrupt / IRQN_WDT1_INTERRUPT = 22, /!< Watching dog timer1 interrupt / IRQN_APB_GPIO_INTERRUPT = 23, /!< APB GPIO interrupt / IRQN_DVP_INTERRUPT = 24, /!< Digital video port interrupt / IRQN_AI_INTERRUPT = 25, /!< AI accelerator interrupt / IRQN_FFT_INTERRUPT = 26, /!< FFT accelerator interrupt / IRQN_DMA0_INTERRUPT = 27, /!< DMA channel0 interrupt / IRQN_DMA1_INTERRUPT = 28, /!< DMA channel1 interrupt / IRQN_DMA2_INTERRUPT = 29, /!< DMA channel2 interrupt / IRQN_DMA3_INTERRUPT = 30, /!< DMA channel3 interrupt / IRQN_DMA4_INTERRUPT = 31, /!< DMA channel4 interrupt / IRQN_DMA5_INTERRUPT = 32, /!< DMA channel5 interrupt / IRQN_UARTHS_INTERRUPT = 33, /!< Hi - speed UART0 interrupt / IRQN_GPIOHS0_INTERRUPT = 34, /!< Hi - speed GPIO0 interrupt / IRQN_GPIOHS1_INTERRUPT = 35, /!< Hi - speed GPIO1 interrupt / IRQN_GPIOHS2_INTERRUPT = 36, /!< Hi - speed GPIO2 interrupt / IRQN_GPIOHS3_INTERRUPT = 37, /!< Hi - speed GPIO3 interrupt / IRQN_GPIOHS4_INTERRUPT = 38, /!< Hi - speed GPIO4 interrupt / IRQN_GPIOHS5_INTERRUPT = 39, /!< Hi - speed GPIO5 interrupt / IRQN_GPIOHS6_INTERRUPT = 40, /!< Hi - speed GPIO6 interrupt / IRQN_GPIOHS7_INTERRUPT = 41, /!< Hi - speed GPIO7 interrupt / IRQN_GPIOHS8_INTERRUPT = 42, /!< Hi - speed GPIO8 interrupt / IRQN_GPIOHS9_INTERRUPT = 43, /!< Hi - speed GPIO9 interrupt / IRQN_GPIOHS10_INTERRUPT = 44, /!< Hi - speed GPIO10 interrupt / IRQN_GPIOHS11_INTERRUPT = 45, /!< Hi - speed GPIO11 interrupt / IRQN_GPIOHS12_INTERRUPT = 46, /!< Hi - speed GPIO12 interrupt / IRQN_GPIOHS13_INTERRUPT = 47, /!< Hi - speed GPIO13 interrupt / IRQN_GPIOHS14_INTERRUPT = 48, /!< Hi - speed GPIO14 interrupt / IRQN_GPIOHS15_INTERRUPT = 49, /!< Hi - speed GPIO15 interrupt / IRQN_GPIOHS16_INTERRUPT = 50, /!< Hi - speed GPIO16 interrupt / IRQN_GPIOHS17_INTERRUPT = 51, /!< Hi - speed GPIO17 interrupt / IRQN_GPIOHS18_INTERRUPT = 52, /!< Hi - speed GPIO18 interrupt / IRQN_GPIOHS19_INTERRUPT = 53, /!< Hi - speed GPIO19 interrupt / IRQN_GPIOHS20_INTERRUPT = 54, /!< Hi - speed GPIO20 interrupt / IRQN_GPIOHS21_INTERRUPT = 55, /!< Hi - speed GPIO21 interrupt / IRQN_GPIOHS22_INTERRUPT = 56, /!< Hi - speed GPIO22 interrupt / IRQN_GPIOHS23_INTERRUPT = 57, /!< Hi - speed GPIO23 interrupt / IRQN_GPIOHS24_INTERRUPT = 58, /!< Hi - speed GPIO24 interrupt / IRQN_GPIOHS25_INTERRUPT = 59, /!< Hi - speed GPIO25 interrupt / IRQN_GPIOHS26_INTERRUPT = 60, /!< Hi - speed GPIO26 interrupt / IRQN_GPIOHS27_INTERRUPT = 61, /!< Hi - speed GPIO27 interrupt / IRQN_GPIOHS28_INTERRUPT = 62, /!< Hi - speed GPIO28 interrupt / IRQN_GPIOHS29_INTERRUPT = 63, /!< Hi - speed GPIO29 interrupt / IRQN_GPIOHS30_INTERRUPT = 64, /!< Hi - speed GPIO30 interrupt / IRQN_GPIOHS31_INTERRUPT = 65, /!< Hi - speed GPIO31 interrupt / IRQN_MAX } plic_irq_t ; 成员

68 第 4 章中断 PLIC 62 成员名称 IRQN_NO_INTERRUPT IRQN_SPI0_INTERRUPT IRQN_SPI1_INTERRUPT IRQN_SPI_SLAVE_INTERRUPT IRQN_SPI3_INTERRUPT IRQN_I2S0_INTERRUPT IRQN_I2S1_INTERRUPT IRQN_I2S2_INTERRUPT IRQN_I2C0_INTERRUPT IRQN_I2C1_INTERRUPT IRQN_I2C2_INTERRUPT IRQN_UART1_INTERRUPT IRQN_UART2_INTERRUPT IRQN_UART3_INTERRUPT IRQN_TIMER0A_INTERRUPT IRQN_TIMER0B_INTERRUPT IRQN_TIMER1A_INTERRUPT IRQN_TIMER1B_INTERRUPT IRQN_TIMER2A_INTERRUPT IRQN_TIMER2B_INTERRUPT IRQN_RTC_INTERRUPT IRQN_WDT0_INTERRUPT IRQN_WDT1_INTERRUPT IRQN_APB_GPIO_INTERRUPT IRQN_DVP_INTERRUPT IRQN_AI_INTERRUPT IRQN_FFT_INTERRUPTFFT IRQN_DMA0_INTERRUPT IRQN_DMA1_INTERRUPT IRQN_DMA2_INTERRUPT IRQN_DMA3_INTERRUPT IRQN_DMA4_INTERRUPT IRQN_DMA5_INTERRUPT IRQN_UARTHS_INTERRUPT IRQN_GPIOHS0_INTERRUPT 描述不存在 SPI0 中断 SPI1 中断从 SPI 中断 SPI3 中断 I2S0 中断 I2S1 中断 I2S2 中断 I2C0 中断 I2C1 中断 I2C2 中断 UART1 中断 UART2 中断 UART3 中断 TIMER0 通道 0 和 1 中断 TIMER0 通道 2 和 3 中断 TIMER1 通道 0 和 1 中断 TIMER1 通道 2 和 3 中断 TIMER2 通道 0 和 1 中断 TIMER2 通道 2 和 3 中断 RTC 滴答中断和报警中断看门狗 0 中断看门狗 1 中断普通 GPIO 中断数字摄像头 (DVP) 中断 AI 加速器中断傅里叶加速器中断 DMA 通道 0 中断 DMA 通道 1 中断 DMA 通道 2 中断 DMA 通道 3 中断 DMA 通道 4 中断 DMA 通道 5 中断高速 UART 中断高速 GPIO0 中断

69 第 4 章中断 PLIC 63 成员名称 IRQN_GPIOHS1_INTERRUPT IRQN_GPIOHS2_INTERRUPT IRQN_GPIOHS3_INTERRUPT IRQN_GPIOHS4_INTERRUPT IRQN_GPIOHS5_INTERRUPT IRQN_GPIOHS6_INTERRUPT IRQN_GPIOHS7_INTERRUPT IRQN_GPIOHS8_INTERRUPT IRQN_GPIOHS9_INTERRUPT IRQN_GPIOHS10_INTERRUPT IRQN_GPIOHS11_INTERRUPT IRQN_GPIOHS12_INTERRUPT IRQN_GPIOHS13_INTERRUPT IRQN_GPIOHS14_INTERRUPT IRQN_GPIOHS15_INTERRUPT IRQN_GPIOHS16_INTERRUPT IRQN_GPIOHS17_INTERRUPT IRQN_GPIOHS18_INTERRUPT IRQN_GPIOHS19_INTERRUPT IRQN_GPIOHS20_INTERRUPT IRQN_GPIOHS21_INTERRUPT IRQN_GPIOHS22_INTERRUPT IRQN_GPIOHS23_INTERRUPT IRQN_GPIOHS24_INTERRUPT IRQN_GPIOHS25_INTERRUPT IRQN_GPIOHS26_INTERRUPT IRQN_GPIOHS27_INTERRUPT IRQN_GPIOHS28_INTERRUPT IRQN_GPIOHS29_INTERRUPT IRQN_GPIOHS30_INTERRUPT IRQN_GPIOHS31_INTERRUPT 描述高速 GPIO1 中断高速 GPIO2 中断高速 GPIO3 中断高速 GPIO4 中断高速 GPIO5 中断高速 GPIO6 中断高速 GPIO7 中断高速 GPIO8 中断高速 GPIO9 中断高速 GPIO10 中断高速 GPIO11 中断高速 GPIO12 中断高速 GPIO13 中断高速 GPIO14 中断高速 GPIO15 中断高速 GPIO16 中断高速 GPIO17 中断高速 GPIO18 中断高速 GPIO19 中断高速 GPIO20 中断高速 GPIO21 中断高速 GPIO22 中断高速 GPIO23 中断高速 GPIO24 中断高速 GPIO25 中断高速 GPIO26 中断高速 GPIO27 中断高速 GPIO28 中断高速 GPIO29 中断高速 GPIO30 中断高速 GPIO31 中断 plic_irq_callback_t 描述 外部中断回调函数

70 第 4 章中断 PLIC 定义 typedef int ( plic_irq_callback_t )( void ctx );

71 65 第 5 章 通用输入 / 输出 (GPIO) 5.1 概述 芯片有 8 个通用 GPIO 5.2 功能描述 GPIO 模块具有以下功能 : 可配置上下拉驱动模式 5.3 API 参考 对应的头文件 gpio.h 为用户提供以下接口 gpio_init gpio_set_drive_mode gpio_set_pin gpio_get_pin gpio_init 描述 初始化 GPIO

72 第 5 章通用输入 / 输出 (GPIO) 函数原型 int gpio_init ( void ) 返回值 返回值 描述 0 成功 非 0 失败 gpio_set_drive_mode 描述 设置 GPIO 驱动模式 函数原型 void gpio_set_drive_mode ( uint8_t pin, gpio_drive_mode_t mode ) 参数 参数名称描述输入输出 pin GPIO 管脚输入 mode GPIO 驱动模式输入 返回值 gpio_set_pin 描述 设置 GPIO 管脚值 函数原型

73 第 5 章通用输入 / 输出 (GPIO) 67 void gpio_set_pin ( uint8_t pin, gpio_pin_value_t value ) 参数 参数名称描述输入输出 pin GPIO 管脚输入 value GPIO 值输入 返回值 gpio_get_pin 描述 获取 GPIO 管脚值 函数原型 gpio_pin_value_t gpio_get_pin ( uint8_t pin ) 参数 参数名称描述输入输出 pin GPIO 管脚输入 返回值 获取的 GPIO 管脚值 举例 / 设置 IO13 为输出并置为高 / gpio_init (); fpioa_set_function (13, FUNC_GPIO3 ); gpio_set_drive_mode (3, GPIO_DM_OUTPUT ); gpio_set_pin (3, GPIO_PV_High );

74 第 5 章通用输入 / 输出 (GPIO) 数据类型 相关数据类型 数据结构定义如下 : gpio_drive_mode_t:gpio 驱动模式 gpio_pin_value_t:gpio 值 gpio_drive_mode_t 描述 GPIO 驱动模式 定义 typedef enum _gpio_drive_mode { GPIO_DM_INPUT, GPIO_DM_INPUT_PULL_DOWN, GPIO_DM_INPUT_PULL_UP, GPIO_DM_OUTPUT, } gpio_drive_mode_t ; 成员 成员名称 GPIO_DM_INPUT GPIO_DM_INPUT_PULL_DOWN GPIO_DM_INPUT_PULL_UP GPIO_DM_OUTPUT 描述输入输入下拉输入上拉输出 gpio_pin_value_t 描述 GPIO 值 定义 typedef enum _gpio_pin_value

75 第 5 章通用输入 / 输出 (GPIO) 69 { GPIO_PV_LOW, GPIO_PV_HIGH } gpio_pin_value_t ; 成员 成员名称 GPIO_PV_LOW GPIO_PV_HIGH 描述 低 高

76 70 第 6 章 通用高速输入 / 输出 (GPIOHS) 6.1 概述 芯片有 32 个高速 GPIO 与普通 GPIO 相似, 管脚反转能力更强 6.2 功能描述 GPIOHS 模块具有以下功能 : 可配置上下拉驱动模式 支持上升沿 下降沿和双沿触发 6.3 API 参考 对应的头文件 gpiohs.h 为用户提供以下接口 gpiohs_set_drive_mode gpiohs_set_pin gpiohs_get_pin gpiohs_set_pin_edge gpiohs_set_irq (0.6.0 后不再支持, 请使用 gpiohs_irq_register) gpiohs_irq_register gpiohs_irq_unregister

77 第 6 章通用高速输入 / 输出 (GPIOHS) gpiohs_set_drive_mode 描述 设置 GPIO 驱动模式 函数原型 void gpiohs_set_drive_mode ( uint8_t pin, gpio_drive_mode_t mode ) 参数 参数名称描述输入输出 pin GPIO 管脚输入 mode GPIO 驱动模式输入 返回值 gpio_set_pin 描述 设置 GPIO 管脚值 函数原型 void gpiohs_set_pin ( uint8_t pin, gpio_pin_value_t value ) 参数 参数名称描述输入输出 pin GPIO 管脚输入 value GPIO 值输入 返回值

78 第 6 章通用高速输入 / 输出 (GPIOHS) gpio_get_pin 描述 获取 GPIO 管脚值 函数原型 gpio_pin_value_t gpiohs_get_pin ( uint8_t pin ) 参数 参数名称描述输入输出 pin GPIO 管脚输入 返回值 获取的 GPIO 管脚值 gpiohs_set_pin_edge 描述 设置高速 GPIO 中断触发模式 函数原型 void gpiohs_set_pin_edge ( uint8_t pin, gpio_pin_edge_t edge ) 参数 参数名称描述输入输出 pin GPIO 管脚输入 edge 中断触发方式输入 返回值

79 第 6 章通用高速输入 / 输出 (GPIOHS) gpiohs_set_irq 描述 设置高速 GPIO 的中断回调函数 函数原型 void gpiohs_set_irq ( uint8_t pin, uint32_t priority, void ( func )()); 参数 参数名称 描述 输入输出 pin GPIO 管脚 输入 priority 中断优先级 输入 func 中断回调函数 输入 返回值 gpiohs_irq_register 描述 设置高速 GPIO 的中断回调函数 函数原型 void gpiohs_irq_register ( uint8_t pin, uint32_t priority, plic_irq_callback_t callback, void ctx) 参数 参数名称 描述 输入输出 pin GPIO 管脚 输入 priority 中断优先级 输入 plic_irq_callback_t 中断回调函数 输入

80 第 6 章通用高速输入 / 输出 (GPIOHS) 74 参数名称描述输入输出 ctx 回调函数参数输入 返回值 gpiohs_irq_unregister 描述 注销 GPIOHS 中断 函数原型 void gpiohs_irq_unregister ( uint8_t pin ) 参数 参数名称描述输入输出 pin GPIO 管脚输入 返回值 举例 void irq_gpiohs2 ( void ctx) { printf (" Hello world \n"); } / 设置 IO13 为高速 G P I O, 输出模式并置为高 / fpioa_set_function (13, FUNC_GPIOHS3 ); gpiohs_set_drive_mode (3, GPIO_DM_OUTPUT ); gpiohs_set_pin (3, GPIO_PV_High ); / 设置 IO14 为高速 GPIO 输入模式 双沿触发中断时打印 Hello world / plic_init (); fpioa_set_function (14, FUNC_GPIOHS2 ); gpiohs_set_drive_mode (2, GPIO_DM_INPUT ); gpiohs_set_pin_edge (2, GPIO_PE_BOTH );

81 第 6 章通用高速输入 / 输出 (GPIOHS) 75 gpiohs_irq_register (2, 1, irq_gpiohs2, NULL ); sysctl_enable_irq (); 6.4 数据类型 相关数据类型 数据结构定义如下 : gpio_drive_mode_t:gpio 驱动模式 gpio_pin_value_t:gpio 值 gpio_pin_edge_t:gpio 边沿触发模式 gpio_drive_mode_t 描述 GPIO 驱动模式 定义 typedef enum _gpio_drive_mode { GPIO_DM_INPUT, GPIO_DM_INPUT_PULL_DOWN, GPIO_DM_INPUT_PULL_UP, GPIO_DM_OUTPUT, } gpio_drive_mode_t ; 成员 成员名称 GPIO_DM_INPUT GPIO_DM_INPUT_PULL_DOWN GPIO_DM_INPUT_PULL_UP GPIO_DM_OUTPUT 描述输入输入下拉输入上拉输出 gpio_pin_value_t 描述 GPIO 值

82 第 6 章通用高速输入 / 输出 (GPIOHS) 定义 typedef enum _gpio_pin_value { GPIO_PV_LOW, GPIO_PV_HIGH } gpio_pin_value_t ; 成员 成员名称 GPIO_PV_LOW GPIO_PV_HIGH 描述 低 高 gpio_pin_edge_t 描述 高速 GPIO 边沿触发模式 定义 typedef enum _gpio_pin_edge { GPIO_PE_NONE, GPIO_PE_FALLING, GPIO_PE_RISING, GPIO_PE_BOTH, GPIO_PE_LOW, GPIO_PE_HIGH = 8, } gpio_pin_edge_t ; 成员 成员名称 GPIO_PE_NONE GPIO_PE_FALLING GPIO_PE_RISING GPIO_PE_BOTH 描述不触发下降沿触发上升沿触发双沿触发

83 第 6 章通用高速输入 / 输出 (GPIOHS) 77 成员名称 GPIO_PE_LOW GPIO_PE_HIGH 描述 低电平触发 高电平触发

84 78 第 7 章 现场可编程 IO 阵列 (FPIOA) 7.1 概述 FPIOA( 现场可编程 IO 阵列 ) 允许用户将 255 个内部功能映射到芯片外围的 48 个自由 IO 上 7.2 功能描述 支持 IO 的可编程功能选择 支持 IO 输出的 8 种驱动能力选择 支持 IO 的内部上拉电阻选择 支持 IO 的内部下拉电阻选择 支持 IO 输入的内部施密特触发器设置 支持 IO 输出的斜率控制 支持内部输入逻辑的电平设置 7.3 API 参考 对应的头文件 fpioa.h 为用户提供以下接口 fpioa_set_function fpioa_get_io_by_function fpioa_set_io fpioa_get_io fpioa_set_tie_enable fpioa_set_tie_value

85 第 7 章现场可编程 IO 阵列 (FPIOA) 79 fpioa_set_io_pull fpioa_get_io_pull fpioa_set_io_driving fpioa_get_io_driving fpioa_set_function 描述 设置 IO0-IO47 管脚复用功能 函数原型 int fpioa_set_function ( int number, fpioa_function_t function ) 参数 参数名称描述输入输出 number IO 管脚号输入 function FPIOA 功能号输入 返回值 返回值 描述 0 成功 非 0 失败 fpioa_get_io_by_function 描述 根据功能号获取 IO 管脚号 函数原型 int fpioa_get_io_by_function ( fpioa_function_t function )

86 第 7 章现场可编程 IO 阵列 (FPIOA) 参数 参数名称描述输入输出 function FPIOA 功能号输入 返回值 返回值 大于等于 0 小于 0 描述 IO 管脚号 失败 fpioa_get_io 描述 获得 IO 管脚的配置 函数原型 int fpioa_get_io ( int number, fpioa_io_config_t cfg ) 参数 参数名称描述输入输出 number IO 管脚号输入 cfg 管脚功能结构体输出 返回值 返回值 描述 0 成功 非 0 失败

87 第 7 章 现场可编程 IO 阵列 (FPIOA) fpioa_set_io 描述 设置 IO 管脚的配置 函数原型 int fpioa_set_io ( int number, fpioa_io_config_t cfg ) 参数 参数名称描述输入输出 number IO 管脚号输入 cfg 管脚功能结构体输入 返回值 返回值 描述 0 成功 非 0 失败 fpioa_set_tie_enable 描述 使能或禁用 FPIOA 功能输入信号的强制输入电平功能 函数原型 int fpioa_set_tie_enable ( fpioa_function_t function, int enable ) 参数 参数名称描述输入输出 function FPIOA 功能号输入 enable 强制输入电平使能位 0: 禁用 1: 使能输入

88 第 7 章现场可编程 IO 阵列 (FPIOA) 返回值 返回值 描述 0 成功 非 0 失败 fpioa_set_tie_value 描述 设置 FPIOA 功能输入信号的强制输入电平高或者低, 仅在强制输入电平功能启用时生效 函数原型 int fpioa_set_tie_value ( fpioa_function_t function, int value ) 参数 参数名称描述输入输出 function FPIOA 功能号输入 value 强制输入电平值 0: 低 1: 高输入 返回值 返回值 描述 0 成功 非 0 失败 fpioa_set_pull 描述 设置 IO 的上拉下拉 函数原型 int fpioa_set_io_pull ( int number, fpioa_pull_t pull )

89 第 7 章现场可编程 IO 阵列 (FPIOA) 参数 参数名称描述输入输出 number IO 编号输入 pull 上下拉值输入 返回值 返回值 描述 0 成功 非 0 失败 fpioa_get_pull 描述 获取 IO 管脚上下拉值 函数原型 int fpioa_get_io_pull ( int number ) 参数 参数名称描述输入输出 number IO 编号输入 返回值 返回值 描述 0 无上下拉 1 下拉 2 上拉

90 第 7 章 现场可编程 IO 阵列 (FPIOA) fpioa_set_io_driving 描述 设置 IO 管脚的驱动能力 函数原型 int fpioa_set_io_driving ( int number, fpioa_driving_t driving ) 参数 参数名称描述输入输出 number IO 编号输入 driving 驱动能力输入 返回值 返回值 描述 0 成功 非 0 失败 fpioa_get_io_driving 描述 获取驱动能力 函数原型 int fpioa_get_io_driving ( int number ) 参数 参数名称描述输入输出 number IO 编号输入

91 第 7 章现场可编程 IO 阵列 (FPIOA) 返回值 返回值 大于等于 0 小于 0 描述 驱动能力 失败 7.4 数据类型 相关数据类型 数据结构定义如下 : fpioa_function_t: 管脚的功能编号 fpioa_io_config_t:fpioa 的配置 fpioa_pull_t:fpioa 上拉或者下拉特性 fpioa_driving_t:fpioa 驱动能力编号 fpioa_io_config_t 描述 FPIOA 的配置 定义 typedef struct _fpioa_io_config { uint32_t ch_sel : 8; uint32_t ds : 4; uint32_t oe_en : 1; uint32_t oe_inv : 1; uint32_t do_sel : 1; uint32_t do_inv : 1; uint32_t pu : 1; uint32_t pd : 1; uint32_t resv0 : 1; uint32_t sl : 1; uint32_t ie_en : 1; uint32_t ie_inv : 1; uint32_t di_inv : 1; uint32_t st : 1; uint32_t resv1 : 7; uint32_t pad_di : 1; } attribute (( packed, aligned (4))) fpioa_io_config_t ;

92 第 7 章现场可编程 IO 阵列 (FPIOA) 成员 成员名称 ch_sel ds oe_en oe_inv do_sel do_inv pu pd resv0 sl ie_en ie_inv di_inv st resv1 pad_di 描述 FPIOA 功能编号, 从 256 种功能里选择一种 驱动电流强度选择, 参照驱动电流强度表 输出使能 (OE)( 手动模式 ) 1: 使能 0: 禁用输出使能取反 1: 使能 0: 禁用输出信号选择 1: 输出 OE 信号 0: 输出原始信号输出信号取反 1: 使能 0: 禁用上拉使能 1: 使能 0: 禁用下拉使能 1: 使能 0: 禁用保留位输出摆率控制 1: 低摆率, 稳定 0: 高摆率, 快输入使能 (IE)( 手动模式 ) 1: 使能 0: 禁用输入使能取反 1: 使能 0: 禁用输入信号取反 1: 使能 0: 禁用输入施密特触发器 1: 使能 0: 禁用保留位 当前引脚的输入电平 驱动能力选择表 低电平输入电流 ds Min(mA) Typ(mA) Max(mA) 高电平输出电流

93 第 7 章现场可编程 IO 阵列 (FPIOA) 87 ds Min(mA) Typ(mA) Max(mA) fpioa_pull_t 描述 FPIOA 上拉或者下拉特性 定义 typedef enum _fpioa_pull { FPIOA_PULL_NONE, FPIOA_PULL_DOWN, FPIOA_PULL_UP, FPIOA_PULL_MAX } fpioa_pull_t ; 成员 成员名称 FPIOA_PULL_NONE FPIOA_PULL_DOWN FPIOA_PULL_UP 描述无上下拉下拉上拉 禁止同时启用芯片内部的上拉与下拉

94 第 7 章现场可编程 IO 阵列 (FPIOA) fpioa_driving_t 描述 FPIOA 驱动能力编号, 参见驱动能力选择表 定义 typedef enum _fpioa_driving { FPIOA_DRIVING_0, FPIOA_DRIVING_1, FPIOA_DRIVING_2, FPIOA_DRIVING_3, FPIOA_DRIVING_4, FPIOA_DRIVING_5, FPIOA_DRIVING_6, FPIOA_DRIVING_7, } fpioa_driving_t ; 成员 成员名称 描述 FPIOA_DRIVING_0 驱动能力 0 FPIOA_DRIVING_1 驱动能力 1 FPIOA_DRIVING_2 驱动能力 2 FPIOA_DRIVING_3 驱动能力 3 FPIOA_DRIVING_4 驱动能力 4 FPIOA_DRIVING_5 驱动能力 5 FPIOA_DRIVING_6 驱动能力 6 FPIOA_DRIVING_7 驱动能力 fpioa_function_t 描述 管脚的功能编号 定义 typedef enum _fpioa_function

95 第 7 章现场可编程 IO 阵列 (FPIOA) 89 { FUNC_JTAG_TCLK = 0, /!< JTAG Test Clock / FUNC_JTAG_TDI = 1, /!< JTAG Test Data In / FUNC_JTAG_TMS = 2, /!< JTAG Test Mode Select / FUNC_JTAG_TDO = 3, /!< JTAG Test Data Out / FUNC_SPI0_D0 = 4, /!< SPI0 Data 0 / FUNC_SPI0_D1 = 5, /!< SPI0 Data 1 / FUNC_SPI0_D2 = 6, /!< SPI0 Data 2 / FUNC_SPI0_D3 = 7, /!< SPI0 Data 3 / FUNC_SPI0_D4 = 8, /!< SPI0 Data 4 / FUNC_SPI0_D5 = 9, /!< SPI0 Data 5 / FUNC_SPI0_D6 = 10, /!< SPI0 Data 6 / FUNC_SPI0_D7 = 11, /!< SPI0 Data 7 / FUNC_SPI0_SS0 = 12, /!< SPI0 Chip Select 0 / FUNC_SPI0_SS1 = 13, /!< SPI0 Chip Select 1 / FUNC_SPI0_SS2 = 14, /!< SPI0 Chip Select 2 / FUNC_SPI0_SS3 = 15, /!< SPI0 Chip Select 3 / FUNC_SPI0_ARB = 16, /!< SPI0 Arbitration / FUNC_SPI0_SCLK = 17, /!< SPI0 Serial Clock / FUNC_UARTHS_RX = 18, /!< UART High speed Receiver / FUNC_UARTHS_TX = 19, /!< UART High speed Transmitter / FUNC_CLK_IN1 = 20, /!< Clock Input 1 / FUNC_CLK_IN2 = 21, /!< Clock Input 2 / FUNC_CLK_SPI1 = 22, /!< Clock SPI1 / FUNC_CLK_I2C1 = 23, /!< Clock I2C1 / FUNC_GPIOHS0 = 24, /!< GPIO High speed 0 / FUNC_GPIOHS1 = 25, /!< GPIO High speed 1 / FUNC_GPIOHS2 = 26, /!< GPIO High speed 2 / FUNC_GPIOHS3 = 27, /!< GPIO High speed 3 / FUNC_GPIOHS4 = 28, /!< GPIO High speed 4 / FUNC_GPIOHS5 = 29, /!< GPIO High speed 5 / FUNC_GPIOHS6 = 30, /!< GPIO High speed 6 / FUNC_GPIOHS7 = 31, /!< GPIO High speed 7 / FUNC_GPIOHS8 = 32, /!< GPIO High speed 8 / FUNC_GPIOHS9 = 33, /!< GPIO High speed 9 / FUNC_GPIOHS10 = 34, /!< GPIO High speed 10 / FUNC_GPIOHS11 = 35, /!< GPIO High speed 11 / FUNC_GPIOHS12 = 36, /!< GPIO High speed 12 / FUNC_GPIOHS13 = 37, /!< GPIO High speed 13 / FUNC_GPIOHS14 = 38, /!< GPIO High speed 14 / FUNC_GPIOHS15 = 39, /!< GPIO High speed 15 / FUNC_GPIOHS16 = 40, /!< GPIO High speed 16 / FUNC_GPIOHS17 = 41, /!< GPIO High speed 17 / FUNC_GPIOHS18 = 42, /!< GPIO High speed 18 / FUNC_GPIOHS19 = 43, /!< GPIO High speed 19 / FUNC_GPIOHS20 = 44, /!< GPIO High speed 20 / FUNC_GPIOHS21 = 45, /!< GPIO High speed 21 / FUNC_GPIOHS22 = 46, /!< GPIO High speed 22 / FUNC_GPIOHS23 = 47, /!< GPIO High speed 23 / FUNC_GPIOHS24 = 48, /!< GPIO High speed 24 / FUNC_GPIOHS25 = 49, /!< GPIO High speed 25 / FUNC_GPIOHS26 = 50, /!< GPIO High speed 26 / FUNC_GPIOHS27 = 51, /!< GPIO High speed 27 /

96 第 7 章现场可编程 IO 阵列 (FPIOA) 90 FUNC_GPIOHS28 = 52, /!< GPIO High speed 28 / FUNC_GPIOHS29 = 53, /!< GPIO High speed 29 / FUNC_GPIOHS30 = 54, /!< GPIO High speed 30 / FUNC_GPIOHS31 = 55, /!< GPIO High speed 31 / FUNC_GPIO0 = 56, /!< GPIO pin 0 / FUNC_GPIO1 = 57, /!< GPIO pin 1 / FUNC_GPIO2 = 58, /!< GPIO pin 2 / FUNC_GPIO3 = 59, /!< GPIO pin 3 / FUNC_GPIO4 = 60, /!< GPIO pin 4 / FUNC_GPIO5 = 61, /!< GPIO pin 5 / FUNC_GPIO6 = 62, /!< GPIO pin 6 / FUNC_GPIO7 = 63, /!< GPIO pin 7 / FUNC_UART1_RX = 64, /!< UART1 Receiver / FUNC_UART1_TX = 65, /!< UART1 Transmitter / FUNC_UART2_RX = 66, /!< UART2 Receiver / FUNC_UART2_TX = 67, /!< UART2 Transmitter / FUNC_UART3_RX = 68, /!< UART3 Receiver / FUNC_UART3_TX = 69, /!< UART3 Transmitter / FUNC_SPI1_D0 = 70, /!< SPI1 Data 0 / FUNC_SPI1_D1 = 71, /!< SPI1 Data 1 / FUNC_SPI1_D2 = 72, /!< SPI1 Data 2 / FUNC_SPI1_D3 = 73, /!< SPI1 Data 3 / FUNC_SPI1_D4 = 74, /!< SPI1 Data 4 / FUNC_SPI1_D5 = 75, /!< SPI1 Data 5 / FUNC_SPI1_D6 = 76, /!< SPI1 Data 6 / FUNC_SPI1_D7 = 77, /!< SPI1 Data 7 / FUNC_SPI1_SS0 = 78, /!< SPI1 Chip Select 0 / FUNC_SPI1_SS1 = 79, /!< SPI1 Chip Select 1 / FUNC_SPI1_SS2 = 80, /!< SPI1 Chip Select 2 / FUNC_SPI1_SS3 = 81, /!< SPI1 Chip Select 3 / FUNC_SPI1_ARB = 82, /!< SPI1 Arbitration / FUNC_SPI1_SCLK = 83, /!< SPI1 Serial Clock / FUNC_SPI_SLAVE_D0 = 84, /!< SPI Slave Data 0 / FUNC_SPI_SLAVE_SS = 85, /!< SPI Slave Select / FUNC_SPI_SLAVE_SCLK = 86, /!< SPI Slave Serial Clock / FUNC_I2S0_MCLK = 87, /!< I2S0 Master Clock / FUNC_I2S0_SCLK = 88, /!< I2S0 Serial Clock ( BCLK ) / FUNC_I2S0_WS = 89, /!< I2S0 Word Select ( LRCLK ) / FUNC_I2S0_IN_D0 = 90, /!< I2S0 Serial Data Input 0 / FUNC_I2S0_IN_D1 = 91, /!< I2S0 Serial Data Input 1 / FUNC_I2S0_IN_D2 = 92, /!< I2S0 Serial Data Input 2 / FUNC_I2S0_IN_D3 = 93, /!< I2S0 Serial Data Input 3 / FUNC_I2S0_OUT_D0 = 94, /!< I2S0 Serial Data Output 0 / FUNC_I2S0_OUT_D1 = 95, /!< I2S0 Serial Data Output 1 / FUNC_I2S0_OUT_D2 = 96, /!< I2S0 Serial Data Output 2 / FUNC_I2S0_OUT_D3 = 97, /!< I2S0 Serial Data Output 3 / FUNC_I2S1_MCLK = 98, /!< I2S1 Master Clock / FUNC_I2S1_SCLK = 99, /!< I2S1 Serial Clock ( BCLK ) / FUNC_I2S1_WS = 100, /!< I2S1 Word Select ( LRCLK ) / FUNC_I2S1_IN_D0 = 101, /!< I2S1 Serial Data Input 0 / FUNC_I2S1_IN_D1 = 102, /!< I2S1 Serial Data Input 1 / FUNC_I2S1_IN_D2 = 103, /!< I2S1 Serial Data Input 2 / FUNC_I2S1_IN_D3 = 104, /!< I2S1 Serial Data Input 3 /

97 第 7 章现场可编程 IO 阵列 (FPIOA) 91 FUNC_I2S1_OUT_D0 = 105, /!< I2S1 Serial Data Output 0 / FUNC_I2S1_OUT_D1 = 106, /!< I2S1 Serial Data Output 1 / FUNC_I2S1_OUT_D2 = 107, /!< I2S1 Serial Data Output 2 / FUNC_I2S1_OUT_D3 = 108, /!< I2S1 Serial Data Output 3 / FUNC_I2S2_MCLK = 109, /!< I2S2 Master Clock / FUNC_I2S2_SCLK = 110, /!< I2S2 Serial Clock ( BCLK ) / FUNC_I2S2_WS = 111, /!< I2S2 Word Select ( LRCLK ) / FUNC_I2S2_IN_D0 = 112, /!< I2S2 Serial Data Input 0 / FUNC_I2S2_IN_D1 = 113, /!< I2S2 Serial Data Input 1 / FUNC_I2S2_IN_D2 = 114, /!< I2S2 Serial Data Input 2 / FUNC_I2S2_IN_D3 = 115, /!< I2S2 Serial Data Input 3 / FUNC_I2S2_OUT_D0 = 116, /!< I2S2 Serial Data Output 0 / FUNC_I2S2_OUT_D1 = 117, /!< I2S2 Serial Data Output 1 / FUNC_I2S2_OUT_D2 = 118, /!< I2S2 Serial Data Output 2 / FUNC_I2S2_OUT_D3 = 119, /!< I2S2 Serial Data Output 3 / FUNC_RESV0 = 120, /!< Reserved function / FUNC_RESV1 = 121, /!< Reserved function / FUNC_RESV2 = 122, /!< Reserved function / FUNC_RESV3 = 123, /!< Reserved function / FUNC_RESV4 = 124, /!< Reserved function / FUNC_RESV5 = 125, /!< Reserved function / FUNC_I2C0_SCLK = 126, /!< I2C0 Serial Clock / FUNC_I2C0_SDA = 127, /!< I2C0 Serial Data / FUNC_I2C1_SCLK = 128, /!< I2C1 Serial Clock / FUNC_I2C1_SDA = 129, /!< I2C1 Serial Data / FUNC_I2C2_SCLK = 130, /!< I2C2 Serial Clock / FUNC_I2C2_SDA = 131, /!< I2C2 Serial Data / FUNC_CMOS_XCLK = 132, /!< DVP System Clock / FUNC_CMOS_RST = 133, /!< DVP System Reset / FUNC_CMOS_PWND = 134, /!< DVP Power Down Mode / FUNC_CMOS_VSYNC = 135, /!< DVP Vertical Sync / FUNC_CMOS_HREF = 136, /!< DVP Horizontal Reference output / FUNC_CMOS_PCLK = 137, /!< Pixel Clock / FUNC_CMOS_D0 = 138, /!< Data Bit 0 / FUNC_CMOS_D1 = 139, /!< Data Bit 1 / FUNC_CMOS_D2 = 140, /!< Data Bit 2 / FUNC_CMOS_D3 = 141, /!< Data Bit 3 / FUNC_CMOS_D4 = 142, /!< Data Bit 4 / FUNC_CMOS_D5 = 143, /!< Data Bit 5 / FUNC_CMOS_D6 = 144, /!< Data Bit 6 / FUNC_CMOS_D7 = 145, /!< Data Bit 7 / FUNC_SCCB_SCLK = 146, /!< SCCB Serial Clock / FUNC_SCCB_SDA = 147, /!< SCCB Serial Data / FUNC_UART1_CTS = 148, /!< UART1 Clear To Send / FUNC_UART1_DSR = 149, /!< UART1 Data Set Ready / FUNC_UART1_DCD = 150, /!< UART1 Data Carrier Detect / FUNC_UART1_RI = 151, /!< UART1 Ring Indicator / FUNC_UART1_SIR_IN = 152, /!< UART1 Serial Infrared Input / FUNC_UART1_DTR = 153, /!< UART1 Data Terminal Ready / FUNC_UART1_RTS = 154, /!< UART1 Request To Send / FUNC_UART1_OUT2 = 155, /!< UART1 User - designated Output 2 / FUNC_UART1_OUT1 = 156, /!< UART1 User - designated Output 1 / FUNC_UART1_SIR_OUT = 157, /!< UART1 Serial Infrared Output /

98 第 7 章现场可编程 IO 阵列 (FPIOA) 92 FUNC_UART1_BAUD = 158, /!< UART1 Transmit Clock Output / FUNC_UART1_RE = 159, /!< UART1 Receiver Output Enable / FUNC_UART1_DE = 160, /!< UART1 Driver Output Enable / FUNC_UART1_RS485_EN = 161, /!< UART1 RS485 Enable / FUNC_UART2_CTS = 162, /!< UART2 Clear To Send / FUNC_UART2_DSR = 163, /!< UART2 Data Set Ready / FUNC_UART2_DCD = 164, /!< UART2 Data Carrier Detect / FUNC_UART2_RI = 165, /!< UART2 Ring Indicator / FUNC_UART2_SIR_IN = 166, /!< UART2 Serial Infrared Input / FUNC_UART2_DTR = 167, /!< UART2 Data Terminal Ready / FUNC_UART2_RTS = 168, /!< UART2 Request To Send / FUNC_UART2_OUT2 = 169, /!< UART2 User - designated Output 2 / FUNC_UART2_OUT1 = 170, /!< UART2 User - designated Output 1 / FUNC_UART2_SIR_OUT = 171, /!< UART2 Serial Infrared Output / FUNC_UART2_BAUD = 172, /!< UART2 Transmit Clock Output / FUNC_UART2_RE = 173, /!< UART2 Receiver Output Enable / FUNC_UART2_DE = 174, /!< UART2 Driver Output Enable / FUNC_UART2_RS485_EN = 175, /!< UART2 RS485 Enable / FUNC_UART3_CTS = 176, /!< UART3 Clear To Send / FUNC_UART3_DSR = 177, /!< UART3 Data Set Ready / FUNC_UART3_DCD = 178, /!< UART3 Data Carrier Detect / FUNC_UART3_RI = 179, /!< UART3 Ring Indicator / FUNC_UART3_SIR_IN = 180, /!< UART3 Serial Infrared Input / FUNC_UART3_DTR = 181, /!< UART3 Data Terminal Ready / FUNC_UART3_RTS = 182, /!< UART3 Request To Send / FUNC_UART3_OUT2 = 183, /!< UART3 User - designated Output 2 / FUNC_UART3_OUT1 = 184, /!< UART3 User - designated Output 1 / FUNC_UART3_SIR_OUT = 185, /!< UART3 Serial Infrared Output / FUNC_UART3_BAUD = 186, /!< UART3 Transmit Clock Output / FUNC_UART3_RE = 187, /!< UART3 Receiver Output Enable / FUNC_UART3_DE = 188, /!< UART3 Driver Output Enable / FUNC_UART3_RS485_EN = 189, /!< UART3 RS485 Enable / FUNC_TIMER0_TOGGLE1 = 190, /!< TIMER0 Toggle Output 1 / FUNC_TIMER0_TOGGLE2 = 191, /!< TIMER0 Toggle Output 2 / FUNC_TIMER0_TOGGLE3 = 192, /!< TIMER0 Toggle Output 3 / FUNC_TIMER0_TOGGLE4 = 193, /!< TIMER0 Toggle Output 4 / FUNC_TIMER1_TOGGLE1 = 194, /!< TIMER1 Toggle Output 1 / FUNC_TIMER1_TOGGLE2 = 195, /!< TIMER1 Toggle Output 2 / FUNC_TIMER1_TOGGLE3 = 196, /!< TIMER1 Toggle Output 3 / FUNC_TIMER1_TOGGLE4 = 197, /!< TIMER1 Toggle Output 4 / FUNC_TIMER2_TOGGLE1 = 198, /!< TIMER2 Toggle Output 1 / FUNC_TIMER2_TOGGLE2 = 199, /!< TIMER2 Toggle Output 2 / FUNC_TIMER2_TOGGLE3 = 200, /!< TIMER2 Toggle Output 3 / FUNC_TIMER2_TOGGLE4 = 201, /!< TIMER2 Toggle Output 4 / FUNC_CLK_SPI2 = 202, /!< Clock SPI2 / FUNC_CLK_I2C2 = 203, /!< Clock I2C2 / FUNC_INTERNAL0 = 204, /!< Internal function signal 0 / FUNC_INTERNAL1 = 205, /!< Internal function signal 1 / FUNC_INTERNAL2 = 206, /!< Internal function signal 2 / FUNC_INTERNAL3 = 207, /!< Internal function signal 3 / FUNC_INTERNAL4 = 208, /!< Internal function signal 4 / FUNC_INTERNAL5 = 209, /!< Internal function signal 5 / FUNC_INTERNAL6 = 210, /!< Internal function signal 6 /

99 第 7 章现场可编程 IO 阵列 (FPIOA) 93 FUNC_INTERNAL7 = 211, /!< Internal function signal 7 / FUNC_INTERNAL8 = 212, /!< Internal function signal 8 / FUNC_INTERNAL9 = 213, /!< Internal function signal 9 / FUNC_INTERNAL10 = 214, /!< Internal function signal 10 / FUNC_INTERNAL11 = 215, /!< Internal function signal 11 / FUNC_INTERNAL12 = 216, /!< Internal function signal 12 / FUNC_INTERNAL13 = 217, /!< Internal function signal 13 / FUNC_INTERNAL14 = 218, /!< Internal function signal 14 / FUNC_INTERNAL15 = 219, /!< Internal function signal 15 / FUNC_INTERNAL16 = 220, /!< Internal function signal 16 / FUNC_INTERNAL17 = 221, /!< Internal function signal 17 / FUNC_CONSTANT = 222, /!< Constant function / FUNC_INTERNAL18 = 223, /!< Internal function signal 18 / FUNC_DEBUG0 = 224, /!< Debug function 0 / FUNC_DEBUG1 = 225, /!< Debug function 1 / FUNC_DEBUG2 = 226, /!< Debug function 2 / FUNC_DEBUG3 = 227, /!< Debug function 3 / FUNC_DEBUG4 = 228, /!< Debug function 4 / FUNC_DEBUG5 = 229, /!< Debug function 5 / FUNC_DEBUG6 = 230, /!< Debug function 6 / FUNC_DEBUG7 = 231, /!< Debug function 7 / FUNC_DEBUG8 = 232, /!< Debug function 8 / FUNC_DEBUG9 = 233, /!< Debug function 9 / FUNC_DEBUG10 = 234, /!< Debug function 10 / FUNC_DEBUG11 = 235, /!< Debug function 11 / FUNC_DEBUG12 = 236, /!< Debug function 12 / FUNC_DEBUG13 = 237, /!< Debug function 13 / FUNC_DEBUG14 = 238, /!< Debug function 14 / FUNC_DEBUG15 = 239, /!< Debug function 15 / FUNC_DEBUG16 = 240, /!< Debug function 16 / FUNC_DEBUG17 = 241, /!< Debug function 17 / FUNC_DEBUG18 = 242, /!< Debug function 18 / FUNC_DEBUG19 = 243, /!< Debug function 19 / FUNC_DEBUG20 = 244, /!< Debug function 20 / FUNC_DEBUG21 = 245, /!< Debug function 21 / FUNC_DEBUG22 = 246, /!< Debug function 22 / FUNC_DEBUG23 = 247, /!< Debug function 23 / FUNC_DEBUG24 = 248, /!< Debug function 24 / FUNC_DEBUG25 = 249, /!< Debug function 25 / FUNC_DEBUG26 = 250, /!< Debug function 26 / FUNC_DEBUG27 = 251, /!< Debug function 27 / FUNC_DEBUG28 = 252, /!< Debug function 28 / FUNC_DEBUG29 = 253, /!< Debug function 29 / FUNC_DEBUG30 = 254, /!< Debug function 30 / FUNC_DEBUG31 = 255, /!< Debug function 31 / FUNC_MAX = 256, /!< Function numbers / } fpioa_function_t ; 成员

100 第 7 章现场可编程 IO 阵列 (FPIOA) 94 成员名称 描述 FUNC_JTAG_TCLK JTAG 时钟接口 FUNC_JTAG_TDI JTAG 数据输入接口 FUNC_JTAG_TMS JTAG 控制 TAP 状态机的转换 FUNC_JTAG_TDO JTAG 数据输出接口 FUNC_SPI0_D0 SPI0 数据线 0 FUNC_SPI0_D1 SPI0 数据线 1 FUNC_SPI0_D2 SPI0 数据线 2 FUNC_SPI0_D3 SPI0 数据线 3 FUNC_SPI0_D4 SPI0 数据线 4 FUNC_SPI0_D5 SPI0 数据线 5 FUNC_SPI0_D6 SPI0 数据线 6 FUNC_SPI0_D7 SPI0 数据线 7 FUNC_SPI0_SS0 SPI0 片选信号 0 FUNC_SPI0_SS1 SPI0 片选信号 1 FUNC_SPI0_SS2 SPI0 片选信号 2 FUNC_SPI0_SS3 SPI0 片选信号 3 FUNC_SPI0_ARB SPI0 仲裁信号 FUNC_SPI0_SCLK SPI0 时钟 FUNC_UARTHS_RX UART 高速接收数据接口 FUNC_UARTHS_TX UART 高速发送数据接口 FUNC_RESV6 保留功能 FUNC_RESV7 保留功能 FUNC_CLK_SPI1 SPI1 时钟 FUNC_CLK_I2C1 I2C1 时钟 FUNC_GPIOHS0 高速 GPIO0 FUNC_GPIOHS1 高速 GPIO1 FUNC_GPIOHS2 高速 GPIO2 FUNC_GPIOHS3 高速 GPIO3 FUNC_GPIOHS4 高速 GPIO4 FUNC_GPIOHS5 高速 GPIO5 FUNC_GPIOHS6 高速 GPIO6 FUNC_GPIOHS7 高速 GPIO7 FUNC_GPIOHS8 高速 GPIO8 FUNC_GPIOHS9 高速 GPIO9 FUNC_GPIOHS10 高速 GPIO10

101 第 7 章现场可编程 IO 阵列 (FPIOA) 95 成员名称 FUNC_GPIOHS11 FUNC_GPIOHS12 FUNC_GPIOHS13 FUNC_GPIOHS14 FUNC_GPIOHS15 FUNC_GPIOHS16 FUNC_GPIOHS17 FUNC_GPIOHS18 FUNC_GPIOHS19 FUNC_GPIOHS20 FUNC_GPIOHS21 FUNC_GPIOHS22 FUNC_GPIOHS23 FUNC_GPIOHS24 FUNC_GPIOHS25 FUNC_GPIOHS26 FUNC_GPIOHS27 FUNC_GPIOHS28 FUNC_GPIOHS29 FUNC_GPIOHS30 FUNC_GPIOHS31 FUNC_GPIO0 FUNC_GPIO1 FUNC_GPIO2 FUNC_GPIO3 FUNC_GPIO4 FUNC_GPIO5 FUNC_GPIO6 FUNC_GPIO7 FUNC_UART1_RX FUNC_UART1_TX FUNC_UART2_RX FUNC_UART2_TX FUNC_UART3_RX FUNC_UART3_TX 描述高速 GPIO11 高速 GPIO12 高速 GPIO13 高速 GPIO14 高速 GPIO15 高速 GPIO16 高速 GPIO17 高速 GPIO18 高速 GPIO19 高速 GPIO20 高速 GPIO21 高速 GPIO22 高速 GPIO23 高速 GPIO24 高速 GPIO25 高速 GPIO26 高速 GPIO27 高速 GPIO28 高速 GPIO29 高速 GPIO30 高速 GPIO31 GPIO0 GPIO1 GPIO2 GPIO3 GPIO4 GPIO5 GPIO6 GPIO7 UART1 接收数据接口 UART1 发送数据接口 UART2 接收数据接口 UART2 发送数据接口 UART3 接收数据接口 UART3 发送数据接口

102 第 7 章现场可编程 IO 阵列 (FPIOA) 96 成员名称 描述 FUNC_SPI1_D0 SPI1 数据线 0 FUNC_SPI1_D1 SPI1 数据线 1 FUNC_SPI1_D2 SPI1 数据线 2 FUNC_SPI1_D3 SPI1 数据线 3 FUNC_SPI1_D4 SPI1 数据线 4 FUNC_SPI1_D5 SPI1 数据线 5 FUNC_SPI1_D6 SPI1 数据线 6 FUNC_SPI1_D7 SPI1 数据线 7 FUNC_SPI1_SS0 SPI1 片选信号 0 FUNC_SPI1_SS1 SPI1 片选信号 1 FUNC_SPI1_SS2 SPI1 片选信号 2 FUNC_SPI1_SS3 SPI1 片选信号 3 FUNC_SPI1_ARB SPI1 仲裁信号 FUNC_SPI1_SCLK SPI1 时钟 FUNC_SPI_SLAVE_D0 SPI 从模式数据线 0 FUNC_SPI_SLAVE_SS SPI 从模式片选信号 FUNC_SPI_SLAVE_SCLK SPI 从模式时钟 FUNC_I2S0_MCLK I2S0 主时钟 ( 系统时钟 ) FUNC_I2S0_SCLK I2S0 串行时钟 ( 位时钟 ) FUNC_I2S0_WS I2S0 帧时钟 FUNC_I2S0_IN_D0 I2S0 串行输入数据接口 0 FUNC_I2S0_IN_D1 I2S0 串行输入数据接口 1 FUNC_I2S0_IN_D2 I2S0 串行输入数据接口 2 FUNC_I2S0_IN_D3 I2S0 串行输入数据接口 3 FUNC_I2S0_OUT_D0 I2S0 串行输出数据接口 0 FUNC_I2S0_OUT_D1 I2S0 串行输出数据接口 1 FUNC_I2S0_OUT_D2 I2S0 串行输出数据接口 2 FUNC_I2S0_OUT_D3 I2S0 串行输出数据接口 3 FUNC_I2S1_MCLK I2S1 主时钟 ( 系统时钟 ) FUNC_I2S1_SCLK I2S1 串行时钟 ( 位时钟 ) FUNC_I2S1_WS I2S1 帧时钟 FUNC_I2S1_IN_D0 I2S1 串行输入数据接口 0 FUNC_I2S1_IN_D1 I2S1 串行输入数据接口 1 FUNC_I2S1_IN_D2 I2S1 串行输入数据接口 2 FUNC_I2S1_IN_D3 I2S1 串行输入数据接口 3

103 第 7 章现场可编程 IO 阵列 (FPIOA) 97 成员名称 描述 FUNC_I2S1_OUT_D0 I2S1 串行输出数据接口 0 FUNC_I2S1_OUT_D1 I2S1 串行输出数据接口 1 FUNC_I2S1_OUT_D2 I2S1 串行输出数据接口 2 FUNC_I2S1_OUT_D3 I2S1 串行输出数据接口 3 FUNC_I2S2_MCLK I2S2 主时钟 ( 系统时钟 ) FUNC_I2S2_SCLK I2S2 串行时钟 ( 位时钟 ) FUNC_I2S2_WS I2S2 帧时钟 FUNC_I2S2_IN_D0 I2S2 串行输入数据接口 0 FUNC_I2S2_IN_D1 I2S2 串行输入数据接口 1 FUNC_I2S2_IN_D2 I2S2 串行输入数据接口 2 FUNC_I2S2_IN_D3 I2S2 串行输入数据接口 3 FUNC_I2S2_OUT_D0 I2S2 串行输出数据接口 0 FUNC_I2S2_OUT_D1 I2S2 串行输出数据接口 1 FUNC_I2S2_OUT_D2 I2S2 串行输出数据接口 2 FUNC_I2S2_OUT_D3 I2S2 串行输出数据接口 3 FUNC_RESV0 保留功能 FUNC_RESV1 保留功能 FUNC_RESV2 保留功能 FUNC_RESV3 保留功能 FUNC_RESV4 保留功能 FUNC_RESV5 保留功能 FUNC_I2C0_SCLK I2C0 串行时钟 FUNC_I2C0_SDA I2C0 串行数据接口 FUNC_I2C1_SCLK I2C1 串行时钟 FUNC_I2C1_SDA I2C1 串行数据接口 FUNC_I2C2_SCLK I2C2 串行时钟 FUNC_I2C2_SDA I2C2 串行数据接口 FUNC_CMOS_XCLK DVP 系统时钟 FUNC_CMOS_RST DVP 系统复位信号 FUNC_CMOS_PWDN DVP 使能信号 FUNC_CMOS_VSYNC DVP 场同步 FUNC_CMOS_HREF DVP 行参考信号 FUNC_CMOS_PCLK 像素时钟 FUNC_CMOS_D0 像素数据 0 FUNC_CMOS_D1 像素数据 1

104 第 7 章现场可编程 IO 阵列 (FPIOA) 98 成员名称 描述 FUNC_CMOS_D2 像素数据 2 FUNC_CMOS_D3 像素数据 3 FUNC_CMOS_D4 像素数据 4 FUNC_CMOS_D5 像素数据 5 FUNC_CMOS_D6 像素数据 6 FUNC_CMOS_D7 像素数据 7 FUNC_SCCB_SCLK SCCB 时钟 FUNC_SCCB_SDA SCCB 串行数据信号 FUNC_UART1_CTS UART1 清除发送信号 FUNC_UART1_DSR UART1 数据设备准备信号 FUNC_UART1_DCD UART1 数据载波检测 FUNC_UART1_RI UART1 振铃指示 FUNC_UART1_SIR_IN UART1 串行红外输入信号 FUNC_UART1_DTR UART1 数据终端准备信号 FUNC_UART1_RTS UART1 发送请求信号 FUNC_UART1_OUT2 UART1 用户指定输出信号 2 FUNC_UART1_OUT1 UART1 用户指定输出信号 1 FUNC_UART1_SIR_OUT UART1 串行红外输出信号 FUNC_UART1_BAUD UART1 时钟 FUNC_UART1_RE UART1 接收使能 FUNC_UART1_DE UART1 发送使能 FUNC_UART1_RS485_EN UART1 使能 RS485 FUNC_UART2_CTS UART2 清除发送信号 FUNC_UART2_DSR UART2 数据设备准备信号 FUNC_UART2_DCD UART2 数据载波检测 FUNC_UART2_RI UART2 振铃指示 FUNC_UART2_SIR_IN UART2 串行红外输入信号 FUNC_UART2_DTR UART2 数据终端准备信号 FUNC_UART2_RTS UART2 发送请求信号 FUNC_UART2_OUT2 UART2 用户指定输出信号 2 FUNC_UART2_OUT1 UART2 用户指定输出信号 1 FUNC_UART2_SIR_OUT UART2 串行红外输出信号 FUNC_UART2_BAUD UART2 时钟 FUNC_UART2_RE UART2 接收使能 FUNC_UART2_DE UART2 发送使能

105 第 7 章现场可编程 IO 阵列 (FPIOA) 99 成员名称 描述 FUNC_UART2_RS485_EN UART2 使能 RS485 FUNC_UART3_CTS 清除发送信号 FUNC_UART3_DSR 数据设备准备信号 FUNC_UART3_DCD UART3 数据载波检测 FUNC_UART3_RI UART3 振铃指示 FUNC_UART3_SIR_IN UART3 串行红外输入信号 FUNC_UART3_DTR UART3 数据终端准备信号 FUNC_UART3_RTS UART3 发送请求信号 FUNC_UART3_OUT2 UART3 用户指定输出信号 2 FUNC_UART3_OUT1 UART3 用户指定输出信号 1 FUNC_UART3_SIR_OUT UART3 串行红外输出信号 FUNC_UART3_BAUD UART3 时钟 FUNC_UART3_RE UART3 接收使能 FUNC_UART3_DE UART3 发送使能 FUNC_UART3_RS485_EN UART3 使能 RS485 FUNC_TIMER0_TOGGLE1 TIMER0 输出信号 1 FUNC_TIMER0_TOGGLE2 TIMER0 输出信号 2 FUNC_TIMER0_TOGGLE3 TIMER0 输出信号 3 FUNC_TIMER0_TOGGLE4 TIMER0 输出信号 4 FUNC_TIMER1_TOGGLE1 TIMER1 输出信号 1 FUNC_TIMER1_TOGGLE2 TIMER1 输出信号 2 FUNC_TIMER1_TOGGLE3 TIMER1 输出信号 3 FUNC_TIMER1_TOGGLE4 TIMER1 输出信号 4 FUNC_TIMER2_TOGGLE1 TIMER2 输出信号 1 FUNC_TIMER2_TOGGLE2 TIMER2 输出信号 2 FUNC_TIMER2_TOGGLE3 TIMER2 输出信号 3 FUNC_TIMER2_TOGGLE4 TIMER2 输出信号 4 FUNC_CLK_SPI2 SPI2 时钟 FUNC_CLK_I2C2 I2C2 时钟 FUNC_INTERNAL0 内部功能 0 FUNC_INTERNAL1 内部功能 1 FUNC_INTERNAL2 内部功能 2 FUNC_INTERNAL3 内部功能 3 FUNC_INTERNAL4 内部功能 4 FUNC_INTERNAL5 内部功能 5

106 第 7 章现场可编程 IO 阵列 (FPIOA) 100 成员名称 描述 FUNC_INTERNAL6 内部功能 6 FUNC_INTERNAL7 内部功能 7 FUNC_INTERNAL8 内部功能 8 FUNC_INTERNAL9 内部功能 9 FUNC_INTERNAL10 内部功能 10 FUNC_INTERNAL11 内部功能 11 FUNC_INTERNAL12 内部功能 12 FUNC_INTERNAL13 内部功能 13 FUNC_INTERNAL14 内部功能 14 FUNC_INTERNAL15 内部功能 15 FUNC_INTERNAL16 内部功能 16 FUNC_INTERNAL17 内部功能 17 FUNC_CONSTANT 常量 FUNC_INTERNAL18 内部功能 18 FUNC_DEBUG0 调试功能 0 FUNC_DEBUG1 调试功能 1 FUNC_DEBUG2 调试功能 2 FUNC_DEBUG3 调试功能 3 FUNC_DEBUG4 调试功能 4 FUNC_DEBUG5 调试功能 5 FUNC_DEBUG6 调试功能 6 FUNC_DEBUG7 调试功能 7 FUNC_DEBUG8 调试功能 8 FUNC_DEBUG9 调试功能 9 FUNC_DEBUG10 调试功能 10 FUNC_DEBUG11 调试功能 11 FUNC_DEBUG12 调试功能 12 FUNC_DEBUG13 调试功能 13 FUNC_DEBUG14 调试功能 14 FUNC_DEBUG15 调试功能 15 FUNC_DEBUG16 调试功能 16 FUNC_DEBUG17 调试功能 17 FUNC_DEBUG18 调试功能 18 FUNC_DEBUG19 调试功能 19 FUNC_DEBUG20 调试功能 20

107 第 7 章现场可编程 IO 阵列 (FPIOA) 101 成员名称 描述 FUNC_DEBUG21 调试功能 21 FUNC_DEBUG22 调试功能 22 FUNC_DEBUG23 调试功能 23 FUNC_DEBUG24 调试功能 24 FUNC_DEBUG25 调试功能 25 FUNC_DEBUG26 调试功能 26 FUNC_DEBUG27 调试功能 27 FUNC_DEBUG28 调试功能 28 FUNC_DEBUG29 调试功能 29 FUNC_DEBUG30 调试功能 30 FUNC_DEBUG31 调试功能 31

108 102 第 8 章 数字摄像头接口 (DVP) 8.1 概述 DVP 是摄像头接口模块, 支持把摄像头输入图像数据转发给 AI 模块或者内存 8.2 功能描述 DVP 模块具有以下功能 : 支持 RGB565 RGB422 与单通道 Y 灰度输入模式 支持设置帧中断 支持设置传输地址 支持同时向两个地址写数据 ( 输出格式分别是 RGB888 与 RGB565) 支持丢弃不需要处理的帧 8.3 API 参考 对应的头文件 dvp.h 为用户提供以下接口 dvp_init dvp_set_output_enable dvp_set_image_format dvp_set_image_size dvp_set_ai_addr dvp_set_display_addr

109 第 8 章数字摄像头接口 (DVP) 103 dvp_config_interrupt dvp_get_interrupt dvp_clear_interrupt dvp_start_convert dvp_enable_burst dvp_disable_burst dvp_enable_auto dvp_disable_auto dvp_sccb_send_data dvp_sccb_receive_data dvp_sccb_set_clk_rate dvp_set_xclk_rate dvp_init 描述 初始化 DVP 函数原型 void dvp_init ( uint8_t reg_len ) 参数 参数名称描述输入输出 reg_len sccb 寄存器长度输入 返回值 无 dvp_set_output_enable 描述 设置输出模式使能或禁用

110 第 8 章数字摄像头接口 (DVP) 函数原型 void dvp_set_output_enable ( dvp_output_mode_t index, int enable ) 参数 参数名称描述输入输出 index 图像输出至内存或 AI 输入 enable 0: 禁用 1: 使能输入 返回值 dvp_set_image_format 描述 设置图像接收模式,RGB 或 YUV 函数原型 void dvp_set_image_format ( uint32_t format ) 参数 参数名称描述输入输出 format 图像模式 DVP_CFG_RGB_FORMAT RGB 模式 DVP_CFG_YUV_FORMAT YUV 模式输入 返回值 无 dvp_set_image_size 描述 设置 DVP 图像采集尺寸

111 第 8 章数字摄像头接口 (DVP) 函数原型 void dvp_set_image_size ( uint32_t width, uint32_t height ) 参数 参数名称描述输入输出 width 图像宽度输入 height 图像高度输入 返回值 无 dvp_set_ai_addr 描述 设置 AI 存放图像的地址, 供 AI 模块进行算法处理 函数原型 void dvp_set_ai_addr ( uint32_t r_addr, uint32_t g_addr, uint32_t b_addr ) 参数 参数名称 描述 输入输出 r_addr 红色分量地址 输入 g_addr 绿色分量地址 输入 b_addr 蓝色分量地址 输入 返回值 无

112 第 8 章数字摄像头接口 (DVP) dvp_set_display_addr 描述 设置采集图像在内存中的存放地址, 可以用来显示 函数原型 void dvp_set_display_addr ( uint32_t addr ) 参数 参数名称描述输入输出 addr 存放图像的内存地址输入 返回值 无 dvp_config_interrupt 配置 DVP 中断类型 函数原型 void dvp_config_interrupt ( uint32_t interrupt, uint8_t enable ) 描述 设置图像开始和结束中断状态, 使能或禁用 参数 参数名称 描述 输入输出 interrupt 中断类型 DVP_CFG_START_INT_ENABLE 图像开 输入 始采集中断 DVP_CFG_FINISH_INT_ENABLE 图像结束采集中断 enable 0: 禁止 1: 使能 输入

113 第 8 章数字摄像头接口 (DVP) 返回值 dvp_get_interrupt 描述 判断是否是输入的中断类型 函数原型 int dvp_get_interrupt ( uint32_t interrupt ) 参数 参数名称描述输入输出 interrupt 中断类型 DVP_CFG_START_INT_ENABLE 图像开 始采集中断 DVP_CFG_FINISH_INT_ENABLE 图像 结束采集中断 输入 返回值 返回值 描述 0 否 非 0 是 dvp_clear_interrupt 描述 清除中断 函数原型 void dvp_clear_interrupt ( uint32_t interrupt ) 参数

114 第 8 章数字摄像头接口 (DVP) 108 参数名称描述输入输出 interrupt 中断类型 DVP_CFG_START_INT_ENABLE 图像开 始采集中断 DVP_CFG_FINISH_INT_ENABLE 图像 结束采集中断 输入 返回值 dvp_start_convert 描述 开始采集图像, 在确定图像采集开始中断后调用 函数原型 void dvp_start_convert ( void ) 参数 返回值 dvp_enable_burst 描述 使能突发传输模式 函数原型 void dvp_enable_burst ( void ) 参数

115 第 8 章数字摄像头接口 (DVP) 返回值 dvp_disable_burst 描述 禁用突发传输模式 函数原型 void dvp_disable_burst ( void ) 参数 返回值 dvp_enable_auto 描述 使能自动接收图像模式 函数原型 void dvp_enable_auto ( void ) 参数 返回值

116 第 8 章数字摄像头接口 (DVP) dvp_disable_auto 描述 禁用自动接收图像模式 函数原型 void dvp_disable_auto ( void ) 参数 返回值 dvp_sccb_send_data 描述 通过 sccb 发送数据 函数原型 void dvp_sccb_send_data ( uint8_t dev_addr, uint16_t reg_addr, uint8_t reg_data ) 参数 参数名称 描述 输入输出 dev_addr 外设图像传感器 SCCB 地址 输入 reg_addr 外设图像传感器寄存器 输入 reg_data 发送的数据 输入 返回值 无

117 第 8 章数字摄像头接口 (DVP) dvp_sccb_receive_data 描述 通过 SCCB 接收数据 函数原型 uint8_t dvp_sccb_receive_data ( uint8_t dev_addr, uint16_t reg_addr ) 参数 参数名称描述输入输出 dev_addr 外设图像传感器 SCCB 地址输入 reg_addr 外设图像传感器寄存器输入 返回值 读取寄存器的数据 dvp_set_xclk_rate 描述 设置 xclk 的速率 函数原型 uint32_t dvp_set_xclk_rate ( uint32_t xclk_rate ) 参数 参数名称描述输入输出 xclk_rate xclk 的速率输入 返回值 xclk 的实际速率

118 第 8 章数字摄像头接口 (DVP) dvp_sccb_set_clk_rate 描述 设置 sccb 的速率 函数原型 uint32_t dvp_sccb_set_clk_rate ( uint32_t clk_rate ) 参数 参数名称描述输入输出 clk_rate sccb 的速率输入 返回值 返回值 描述 0 失败, 设置的速率太低无法满足, 请使用 I2C 非 0 实际的 sccb 速率 举例 / 采集 的 RGB 图像数据传输至 lcd_gram0, 及 0x x40612c00 0 x 地址处 / uint32_t lcd_gram0 [38400] attribute (( aligned (64))); int on_irq_dvp ( void ctx) { if ( dvp_get_interrupt ( DVP_STS_FRAME_FINISH )) { dvp_clear_interrupt ( DVP_STS_FRAME_FINISH ); } else { dvp_start_convert (); dvp_clear_interrupt ( DVP_STS_FRAME_START ); } return 0; } plic_init ();

119 第 8 章数字摄像头接口 (DVP) 113 dvp_init (8); dvp_set_xclk_rate ( ); dvp_enable_burst (); dvp_set_output_enable ( DVP_OUTPUT_AI, 1); dvp_set_output_enable ( DVP_OUTPUT_DISPLAY, 1); dvp_set_image_format ( DVP_CFG_RGB_FORMAT ); dvp_set_image_size (320, 240); dvp_set_ai_addr (( uint32_t )0 x , ( uint32_t )0 x40612c00, ( uint32_t )0 x ); dvp_set_display_addr ( lcd_gram0 ); dvp_config_interrupt ( DVP_CFG_START_INT_ENABLE DVP_CFG_FINISH_INT_ENABLE, 0); dvp_disable_auto (); plic_set_priority ( IRQN_DVP_INTERRUPT, 1); plic_irq_register ( IRQN_DVP_INTERRUPT, on_irq_dvp, NULL ); plic_irq_enable ( IRQN_DVP_INTERRUPT ); dvp_clear_interrupt ( DVP_STS_FRAME_START DVP_STS_FRAME_FINISH ); dvp_config_interrupt ( DVP_CFG_START_INT_ENABLE DVP_CFG_FINISH_INT_ENABLE, 1); sysctl_enable_irq (); / 通过 SCCB 向地址 0x60 的外设 0xFF 寄存器发送 0x01, 从寄存器 0x1D 读取数据 / dvp_sccb_send_data (0 x60, 0xFF, 0x01 ); dvp_sccb_receive_data (0 x60, 0x1D) 8.4 数据类型 相关数据类型 数据结构定义如下 : dvp_output_mode_t:dvp 输出图像的模式 dvp_output_mode_t 描述 DVP 输入图像的模式 定义 typedef enum _dvp_output_mode { DVP_OUTPUT_AI, DVP_OUTPUT_DISPLAY, } dvp_output_mode_t ; 成员

120 第 8 章数字摄像头接口 (DVP) 114 成员名称 DVP_OUTPUT_AI DVP_OUTPUT_DISPLAY 描述 AI 输出 向内存输出用于显示

121 115 第 9 章 快速傅里叶变换加速器 (FFT) 9.1 概述 FFT 模块是用硬件的方式来实现 FFT 的基 2 时分运算加速 9.2 功能描述 目前该模块可以支持 64 点 128 点 256 点以及 512 点的 FFT 以及 IFFT 在 FFT 内部有两块大小为 512*32bit 的 SRAM, 在配置完成后 FFT 会向 DMA 发送 TX 请求, 将 DMA 送来的送据放到其中的一块 SRAM 中去, 直到满足当前 FFT 运算所需要的数据量并开始 FFT 运算, 蝶形运算单元从包含有有效数据的 SRAM 中读出数据, 运算结束后将数据写到另外一块 SRAM 中去, 下次蝶形运算再从刚写入的 SRAM 中读出数据, 运算结束后并写入另外一块 SRAM, 如此反复交替进行直到完成整个 FFT 运算 9.3 API 参考 对应的头文件 fft.h 为用户提供以下接口 fft_complex_uint16_dma fft_complex_uint16_dma 描述 FFT 运算

122 第 9 章快速傅里叶变换加速器 (FFT) 函数原型 void fft_complex_uint16_dma ( dmac_channel_number_t dma_send_channel_num, dmac_channel_number_t dma_receive_channel_num, uint16_t shift, fft_direction_t direction, const uint64_t input, size_t point_num, uint64_t output ); 参数 参数名称 描述 输入输出 dma_send_channel_num 发送数据使用的 DMA 通道号 输入 dma_receive_channel_num 接收数据使用的 DMA 通道号 输入 shift FFT 模块 16 位寄存器导致数据溢 输入 出 (-32768~32767),FFT 变换有 9 层,shift 决定哪一层需要移位操作 ( 如 0x1ff 表示 9 层都做移位操作 ;0x03 表示第第一层与第二层做移位操作 ), 防止溢出 如果移位了, 则变换后的幅值不是正常 FFT 变换的幅值, 对应关系可以参考 fft_test 测试 demo 程序 包含了求解频率点 相位 幅值的示例 direction FFT 正变换或是逆变换 输入 input 输入的数据序列, 格式为 输入 RIRI.., 实部与虚部的精度都为 16bit point_num 待运算的数据点数, 只能为 输入 512/256/128/64 output 运算后结果 格式为 RIRI.., 实部与虚部的精度都为 16bit 输出 返回值

123 第 9 章快速傅里叶变换加速器 (FFT) 举例 # define FFT_N 512U # define FFT_FORWARD_SHIFT 0x0U # define FFT_BACKWARD_SHIFT 0 x1ffu # define PI complex_hard_t data_hard [ FFT_N ] = {0}; for (i = 0; i < FFT_N ; i++) { tempf1 [0] = 0.3 cosf (2 PI i / FFT_N + PI / 3) 256; tempf1 [1] = 0.1 cosf (16 2 PI i / FFT_N - PI / 9) 256; tempf1 [2] = 0.5 cosf ((19 2 PI i / FFT_N ) + PI / 6) 256; data_hard [i]. real = ( int16_t )( tempf1 [0] + tempf1 [1] + tempf1 [2] + 10); data_hard [i]. imag = ( int16_t )0; } for ( int i = 0; i < FFT_N / 2; ++i) { input_data = ( fft_data_t )& buffer_input [i]; input_data ->R1 = data_hard [2 i]. real ; input_data ->I1 = data_hard [2 i]. imag ; input_data ->R2 = data_hard [2 i + 1]. real ; input_data ->I2 = data_hard [2 i + 1]. imag ; } fft_complex_uint16_dma ( DMAC_CHANNEL0, DMAC_CHANNEL1, FFT_FORWARD_SHIFT, FFT_DIR_FORWARD, buffer_input, FFT_N, buffer_output ); for (i = 0; i < FFT_N / 2; i++) { output_data = ( fft_data_t )& buffer_output [i]; data_hard [2 i]. imag = output_data ->I1 ; data_hard [2 i]. real = output_data ->R1 ; data_hard [2 i + 1]. imag = output_data ->I2 ; data_hard [2 i + 1]. real = output_data ->R2 ; } for ( int i = 0; i < FFT_N / 2; ++i) { input_data = ( fft_data_t )& buffer_input [i]; input_data ->R1 = data_hard [2 i]. real ; input_data ->I1 = data_hard [2 i]. imag ; input_data ->R2 = data_hard [2 i + 1]. real ; input_data ->I2 = data_hard [2 i + 1]. imag ; } fft_complex_uint16_dma ( DMAC_CHANNEL0, DMAC_CHANNEL1, FFT_BACKWARD_SHIFT, FFT_DIR_BACKWARD, buffer_input, FFT_N, buffer_output ); for (i = 0; i < FFT_N / 2; i++) { output_data = ( fft_data_t )& buffer_output [i]; data_hard [2 i]. imag = output_data ->I1 ; data_hard [2 i]. real = output_data ->R1 ; data_hard [2 i + 1]. imag = output_data ->I2 ; data_hard [2 i + 1]. real = output_data ->R2 ;

124 第 9 章快速傅里叶变换加速器 (FFT) 118 } 9.4 数据类型 相关数据类型 数据结构定义如下 : fft_data_t:fft 运算传入的数据格式 fft_direction_t:fft 变换模式 fft_data_t 描述 FFT 运算传入的数据格式 定义 typedef struct tag_fft_data { int16_t I1; int16_t R1; int16_t I2; int16_t R2; } fft_data_t ; 成员 成员名称 I1 R1 I2 R2 描述第一个数据的虚部第一个数据的实部第二个数据的虚部第二个数据的实部 fft_direction_t 描述 FFT 变换模式

125 第 9 章快速傅里叶变换加速器 (FFT) 定义 typedef enum _fft_direction { FFT_DIR_BACKWARD, FFT_DIR_FORWARD, FFT_DIR_MAX, } fft_direction_t ; 成员 成员名称 FFT_DIR_BACKWARD FFT_DIR_FORWARD 描述 FFT 逆变换 FFT 正变换

126 120 第 10 章 安全散列算法加速器 (SHA256) 10.1 功能描述 支持 SHA-256 的计算 10.2 API 参考 对应的头文件 sha256.h 为用户提供以下接口 sha256_init sha256_update sha256_final sha256_hard_calculate sha256_init 描述 初始化 SHA256 加速器外设 函数原型 void sha256_init ( sha256_context_t context, size_t input_len ) 参数

127 第 10 章安全散列算法加速器 (SHA256) 121 参数名称描述输入输出 context SHA256 的上下文对象输入 input_len 待计算 SHA256 hash 的消息的长度输入 返回值 举例 sha256_context_t context ; sha256_init (& context, 128U); sha256_update 描述 传入一个数据块参与 SHA256 Hash 计算 函数原型 void sha256_update ( sha256_context_t context, const void input, size_t input_len ) 参数 参数名称 描述 输入输出 context SHA256 的上下文对象 输入 input 待加入计算的 SHA256 计算的数据块 输入 buf_len 待加入计算的 SHA256 计算数据块的长度 输入 返回值 sha256_final 描述 结束对数据的 SHA256 Hash 计算

128 第 10 章安全散列算法加速器 (SHA256) 函数原型 void sha256_final ( sha256_context_t context, uint8_t output ) 参数 参数名称描述输入输出 context SHA256 的上下文对象输入 output 存放 SHA256 计算的结果, 需保证传入这个 buffer 的大小为 32Bytes 以上输出 返回值 sha256_hard_calculate 描述 一次性对连续的数据计算它的 SHA256 Hash 函数原型 void sha256_hard_calculate ( const uint8_t input, size_t input_len, uint8_t output ) 参数 参数名称 描述 输入输出 input 待 SHA256 计算的数据 输入 input_len 待 SHA256 计算数据的长度 输入 output 存放 SHA256 计算的结果, 需保证传入这个 buffer 的大小为 32Bytes 以上 输出 返回值 举例

129 第 10 章安全散列算法加速器 (SHA256) 123 uint8_t hash [32]; sha256_hard_calculate (( uint8_t )" abc ", 3, hash ); 10.3 例程 进行一次计算 sha256_context_t context ; sha256_init (& context, input_len ); sha256_update (& context, input, input_len ); sha256_final (& context, output ); 或者可以直接调用 sha256_hard_calculate 函数 sha256_hard_calculate ( input, input_len, output ); 进行分块计算 sha256_context_t context ; sha256_init (& context, input_piece1_len + input_piece2_len ); sha256_update (& context, input_piece1, input_piece1_len ); sha256_update (& context, input_piece2, input_piece2_len ); sha256_final (& context, output );

130 124 第 11 章 通用异步收发传输器 (UART) 11.1 概述 嵌入式应用通常要求一个简单的并且占用系统资源少的方法来传输数据 通用异步收发传输器 (UART) 即可以满足这些要求, 它能够灵活地与外部设备进行全双工数据交换 11.2 功能描述 UART 模块具有以下功能 : 配置 UART 参数 自动收取数据到缓冲区 11.3 API 参考 对应的头文件 uart.h 为用户提供以下接口 uart_init uart_config (0.6.0 后不再支持, 请使用 uart_configure) uart_configure uart_send_data uart_send_data_dma uart_send_data_dma_irq uart_receive_data uart_receive_data_dma

131 第 11 章通用异步收发传输器 (UART) 125 uart_receive_data_dma_irq uart_irq_register uart_irq_deregister uart_set_work_mode uart_set_rede_polarity uart_set_rede_enable uart_set_tat uart_set_det uart_debug_init uart_handle_data_dma uart_init 描述 初始化 uart 函数原型 void uart_init ( uart_device_number_t channel ) 参数 参数名称描述输入输出 channel UART 号输入 返回值 uart_configure 描述 设置 UART 相关参数 该函数已废弃, 替代函数为 uart_configure uart_configure 描述 设置 UART 相关参数

132 第 11 章通用异步收发传输器 (UART) 函数原型 void uart_configure ( uart_device_number_t channel, uint32_t baud_rate, uart_bitwidth_t data_width, uart_stopbit_t stopbit, uart_parity_t parity ) 参数 参数名称 描述 输入输出 channel UART 编号 输入 baud_rate 波特率 输入 data_width 数据位 (5-8) 输入 stopbit 停止位 输入 parity 校验位 输入 返回值 uart_send_data 描述 通过 UART 发送数据 函数原型 int uart_send_data ( uart_device_number_t channel, const char buffer, size_t buf_len ) 参数 参数名称 描述 输入输出 channel UART 编号 输入 buffer 待发送数据 输入 buf_len 待发送数据的长度 输入

133 第 11 章通用异步收发传输器 (UART) 返回值 已发送数据的长度 uart_send_data_dma 描述 UART 通过 DMA 发送数据 数据全部发送完毕后返回 函数原型 void uart_send_data_dma ( uart_device_number_t uart_channel, dmac_channel_number_t dmac_channel, const uint8_t buffer, size_t buf_len ) 参数 参数名称 描述 输入输出 uart_channel UART 编号 输入 dmac_channel DMA 通道 输入 buffer 待发送数据 输入 buf_len 待发送数据的长度 输入 返回值 uart_send_data_dma_irq 描述 UART 通过 DMA 发送数据, 并设置 DMA 发送完成中断函数, 仅单次中断 函数原型 void uart_send_data_dma_irq ( uart_device_number_t uart_channel, dmac_channel_number_t dmac_channel, const uint8_t buffer, size_t buf_len, plic_irq_callback_t uart_callback, void ctx, uint32_t priority ) 参数

134 第 11 章通用异步收发传输器 (UART) 128 参数名称 描述 输入输出 uart_channel UART 编号 输入 dmac_channel DMA 通道 输入 buffer 待发送数据 输入 buf_len 待发送数据的长度 输入 uart_callback DMA 中断回调 输入 ctx 中断函数参数 输入 priority 中断优先级 输入 返回值 uart_receive_data 描述 通过 UART 读取数据 函数原型 int uart_receive_data ( uart_device_number_t channel, char buffer, size_t buf_len ); 参数 参数名称 描述 输入输出 channel UART 编号 输入 buffer 接收数据 输出 buf_len 接收数据的长度 输入 返回值 已接收到的数据长度 uart_receive_data_dma 描述 UART 通过 DMA 接收数据

135 第 11 章通用异步收发传输器 (UART) 函数原型 void uart_receive_data_dma ( uart_device_number_t uart_channel, dmac_channel_number_t dmac_channel, uint8_t buffer, size_t buf_len ) 参数 参数名称 描述 输入输出 uart_channel UART 编号 输入 dmac_channel DMA 通道 输入 buffer 接收数据 输出 buf_len 接收数据的长度 输入 返回值 uart_receive_data_dma_irq 描述 UART 通过 DMA 接收数据, 并注册 DMA 接收完成中断函数, 仅单次中断 函数原型 void uart_receive_data_dma_irq ( uart_device_number_t uart_channel, dmac_channel_number_t dmac_channel, uint8_t buffer, size_t buf_len, plic_irq_callback_t uart_callback, void ctx, uint32_t priority ) 参数 参数名称 描述 输入输出 uart_channel UART 编号 输入 dmac_channel DMA 通道 输入 buffer 接收数据 输出 buf_len 接收数据的长度 输入

136 第 11 章通用异步收发传输器 (UART) 130 参数名称 描述 输入输出 uart_callback DMA 中断回调 输入 ctx 中断函数参数 输入 priority 中断优先级 输入 返回值 uart_irq_register 描述 注册 UART 中断函数 函数原型 void uart_irq_register ( uart_device_number_t channel, uart_interrupt_mode_t interrupt_mode, plic_irq_callback_t uart_callback, void ctx, uint32_t priority ) 参数 参数名称 描述 输入输出 channel UART 编号 输入 interrupt_mode 中断类型 输入 uart_callback 中断回调 输入 ctx 中断函数参数 输入 priority 中断优先级 输入 返回值 uart_irq_deregister 描述 注销 UART 中断函数

137 第 11 章通用异步收发传输器 (UART) 函数原型 void uart_irq_deregister ( uart_device_number_t channel, uart_interrupt_mode_t interrupt_mode ) 参数 参数名称描述输入输出 channel UART 编号输入 interrupt_mode 中断类型输入 返回值 uart_set_work_mode 描述 设置 uart 工作模式 有四种模式 : 普通 uart 红外 RS485 全双工 RS485 半双工 函数原型 void uart_set_work_mode ( uart_device_number_t uart_channel, uart_work_mode_t work_mode ) 参数 参数名称描述输入输出 channel UART 编号输入 work_mode 工作模式, 详细见 uartworkmode_t 结构体说明输入 返回值

138 第 11 章通用异步收发传输器 (UART) uart_set_rede_polarity 描述 设置 RS485 re de 管脚有效时的极性 函数原型 void uart_set_rede_polarity ( uart_device_number_t uart_channel, uart_rs485_rede_t rede, uart_polarity_t polarity ) 参数 参数名称 描述 输入输出 uart_channel UART 编号 输入 rede re 或 de 管脚 输入 polarity 有效时极性 输入 返回值 uart_set_rede_enable 描述使能 re de 管脚, 主要用在 rs485 全双工模式,re 和 de 必须手动控制 单双工模式不用调用该函数, 单双工时硬件会自动设置 re de 函数原型 void uart_set_rede_enable ( uart_device_number_t uart_channel, uart_rs485_rede_t rede, bool enable ) 参数 参数名称描述输入输出 uart_channel UART 编号输入 rede re 或 de 管脚输入

139 第 11 章通用异步收发传输器 (UART) 133 参数名称描述输入输出 enable 是否有效输入 返回值 uart_set_tat 描述 配置 re de 互相的时间间隔, 这个与外部的 485 模块有关 函数原型 void uart_set_tat ( uart_device_number_t uart_channel, uart_tat_mode_t tat_mode, size_t time ) 参数 参数名称 描述 输入输出 uart_channel UART 编号 输入 tat_mode 转换模式 re 到 de 或 de 到 re 输入 time 时间 ( 纳秒 ) 输入 返回值 uart_set_det 描述 设置 de 有效无效转换时数据的时间延时 函数原型 void uart_set_det ( uart_device_number_t uart_channel, uart_det_mode_t det_mode, size_t time )

140 第 11 章通用异步收发传输器 (UART) 参数 参数名称 描述 输入输出 uart_channel UART 编号 输入 det_mode 转换模式,de 无效转有效或有效转无效 输入 time 时间 ( 纳秒 ) 输入 返回值 uart_debug_init 描述配置调试串口 系统默认使用 UART3 做为调试串口, 调用该函数用户可以自定义使用哪个 uart 做为调试串口, 如果使用 UART1 或 UART2 需要使用 fpioa 设置管脚 因此调试脚不局限于 fpioa 函数原型 void uart_debug_init ( uart_device_number_t uart_channel ) 参数 参数名称描述输入输出 uart_channel UART 编号,-1 则默认使用上次设置的 UART 输入 返回值 uart_handle_data_dma 描述 UART 通过 DMA 传输数据 函数原型

141 第 11 章通用异步收发传输器 (UART) 135 void uart_handle_data_dma ( uart_device_number_t uart_channel, uart_data_t data, plic_interrupt_t cb) 参数 参数名称 描述 输入输出 uart_channel UART 编号 输入 data UART 数据相关的参数, 详见 i2cdatat 说明 输入 cb dma 中断回调函数, 如果设置为 NULL 则为阻塞模式, 直至传输完毕后退出函数 输入 返回值 无 举例 / UART1 波特率 , 8 位数据, 1 位停止位, 无校验位 / uart_init ( UART_DEVICE_1 ); uart_config ( UART_DEVICE_1, , UART_BITWIDTH_8BIT, UART_STOP_1, UART_PARITY_NONE ); char v_hel = {" hello world!\n"}; / 发送 hello world! / uart_send_data ( UART_DEVICE_1, hel, strlen ( v_hel )); / 接收数据 / while ( uart_receive_data ( UART_DEVICE_1, & recv, 1)) { printf ("%c ", recv ); } 11.4 数据类型 相关数据类型 数据结构定义如下 : uart_device_number_t:uart 编号 uart_bitwidth_t:uart 数据位宽 uart_stopbits_t:uart 停止位 uart_parity_t:uart 校验位 uart_interrupt_mode_t:uart 中断类型, 接收或发送 uart_send_trigger_t: 发送中断或 DMA 触发 FIFO 深度 uart_receive_trigger_t: 接收中断或 DMA 触发 FIFO 深度 uart_data_t: 使用 dma 传输时数据相关的参数

142 第 11 章通用异步收发传输器 (UART) 136 uart_interrupt_mode_t: 传输模式, 发送或接收 uart_work_mode_t:uart 工作模式 uart_rs485_rede_t: 选择 re de 管脚 uart_polarity_t:de re 极性 uart_tat_mode_t:de re 转换选择 uart_det_mode_t:de 有效无效选择 uart_device_number_t 描述 UART 编号 定义 typedef enum _uart_device_number { UART_DEVICE_1, UART_DEVICE_2, UART_DEVICE_3, UART_DEVICE_MAX, } uart_device_number_t ; 成员 成员名称 描述 UART_DEVICE_1 UART 1 UART_DEVICE_2 UART 2 UART_DEVICE_3 UART uart_bitwidth_t 描述 UART 数据位宽 定义 typedef enum _uart_bitwidth { UART_BITWIDTH_5BIT = 0,

143 第 11 章通用异步收发传输器 (UART) 137 UART_BITWIDTH_6BIT, UART_BITWIDTH_7BIT, UART_BITWIDTH_8BIT, } uart_bitwidth_t ; 成员 成员名称 UARTBITWIDTH5BIT UARTBITWIDTH6BIT UARTBITWIDTH7BIT UARTBITWIDTH8BIT 描述 5 比特 6 比特 7 比特 8 比特 uart_stopbits_t 描述 UART 停止位 定义 typedef enum _uart_stopbits { UART_STOP_1, UART_STOP_1_5, UART_STOP_2 } uart_stopbits_t ; 成员 成员名称 UART_STOP_1 UART_STOP_1_5 UART_STOP_2 描述 1 个停止位 1.5 个停止位 2 个停止位 uart_parity_t 描述 UART 校验位

144 第 11 章通用异步收发传输器 (UART) 定义 typedef enum _uart_parity { UART_PARITY_NONE, UART_PARITY_ODD, UART_PARITY_EVEN } uart_parity_t ; 成员 成员名称 UART_PARITY_NONE UART_PARITY_ODD UART_PARITY_EVEN 描述无校验位奇校验偶校验 uart_interrupt_mode_t 描述 UART 中断类型, 接收或发送 定义 typedef enum _uart_interrupt_mode { UART_SEND = 1, UART_RECEIVE = 2, } uart_interrupt_mode_t ; 成员 成员名称 UART_SEND UART_RECEIVE 描述 UART 发送 UART 接收

145 第 11 章 通用异步收发传输器 (UART) uart_send_trigger_t 描述 发送中断或 DMA 触发 FIFO 深度 当 FIFO 中的数据小于等于该值时触发中断或 DMA 传输 FIFO 的深 度为 16 字节 定义 typedef enum _uart_send_trigger { UART_SEND_FIFO_0, UART_SEND_FIFO_2, UART_SEND_FIFO_4, UART_SEND_FIFO_8, } uart_send_trigger_t ; 成员 成员名称 UART_SEND_FIFO_0 UART_SEND_FIFO_2 UART_SEND_FIFO_4 UART_SEND_FIFO_8 描述 FIFO 为空 FIFO 剩余 2 字节 FIFO 剩余 4 字节 FIFO 剩余 8 字节 uart_receive_trigger_t 描述接收中断或 DMA 触发 FIFO 深度 当 FIFO 中的数据大于等于该值时触发中断或 DMA 传输 FIFO 的深度为 16 字节 定义 typedef enum _uart_receive_trigger { UART_RECEIVE_FIFO_1, UART_RECEIVE_FIFO_4, UART_RECEIVE_FIFO_8, UART_RECEIVE_FIFO_14, } uart_receive_trigger_t ;

146 第 11 章通用异步收发传输器 (UART) 成员 成员名称 UART_RECEIVE_FIFO_1 UART_RECEIVE_FIFO_4 UART_RECEIVE_FIFO_8 UART_RECEIVE_FIFO_14 描述 FIFO 剩余 1 字节 FIFO 剩余 2 字节 FIFO 剩余 4 字节 FIFO 剩余 8 字节 uart_data_t 描述 使用 dma 传输时数据相关的参数 定义 typedef struct _uart_data_t { dmac_channel_number_t tx_channel ; dmac_channel_number_t rx_channel ; uint32_t tx_buf ; size_t tx_len ; uint32_t rx_buf ; size_t rx_len ; uart_interrupt_mode_t transfer_mode ; } uart_data_t ; 成员 成员名称 tx_channel rx_channel tx_buf tx_len rx_buf rx_len transfer_mode 描述发送时使用的 DMA 通道号发送时使用的 DMA 通道号发送的数据发送数据的长度接收的数据接收数据长度传输模式, 发送或接收

147 第 11 章 通用异步收发传输器 (UART) uart_interrupt_mode_t 描述 UART 数据传输模式 定义 typedef enum _uart_interrupt_mode { UART_SEND = 1, UART_RECEIVE = 2, } uart_interrupt_mode_t ; 成员 成员名称 UART_SEND UART_RECEIVE 描述 发送 接收 uartworkmode_t 描述 UART 工作模式 定义 typedef enum _uart_work_mode { UART_NORMAL, UART_IRDA, UART_RS485_FULL_DUPLEX, UART_RS485_HALF_DUPLEX, } uart_work_mode_t ; 成员 成员名称 UART_NORMAL UART_IRDA 描述 普通 UART 红外

148 第 11 章通用异步收发传输器 (UART) 142 成员名称 UART_RS485_FULL_DUPLEX UART_RS485_HALF_DUPLEX 描述 全双工 RS485 半双工 RS uart_rs485_rede_t 描述 RS485 re de 管脚 定义 typedef enum _uart_rs485_rede { UART_RS485_DE, UART_RS485_RE, UART_RS485_REDE, } uart_rs485_rede_t ; 成员 成员名称 UART_RS485_DE UART_RS485_RE UART_RS485_REDE 描述选择 de 管脚选择 re 管脚同时选择 de re 管脚 uart_polarity_t 描述 re de 有效时的极性 定义 typedef enum _uart_polarity { UART_LOW, UART_HIGH, } uart_polarity_t ;

149 第 11 章通用异步收发传输器 (UART) 成员 成员名称 UART_LOW UART_HIGH 描述 低电平 高电平 uart_tat_mode_t 描述 re de 转换的模式 定义 typedef enum _uart_tat_mode { UART_DE_TO_RE, UART_RE_TO_DE, UART_TAT_ALL, } uart_tat_mode_t ; 成员 成员名称 UART_DE_TO_RE UART_RE_TO_DE UART_TAT_ALL 描述 de 有效转 re 有效 re 有效转 de 有效 de 转 re re 转 de uart_det_mode_t 描述 de 有效无效选择 定义 typedef enum _uart_det_mode { UART_DE_ASSERTION, UART_DE_DE_ASSERTION,

150 第 11 章通用异步收发传输器 (UART) 144 UART_DE_ALL, } uart_det_mode_t ; 成员 成员名称 UART_DE_ASSERTION UART_DE_DE_ASSERTION UART_DE_ALL 描述 de 有效 de 无效 de 有效无效

151 145 第 12 章 高速通用异步收发传输器 (UARTHS) 12.1 概述 嵌入式应用通常要求一个简单的并且占用系统资源少的方法来传输数据 高速通用异步收发传输器 (UARTHS) 即可以满足这些要求, 它能够灵活地与外部设备进行全双工数据交换 目前系统使用该串口做为调试串口,printf 时会调用该串口输出 12.2 功能描述 UARTHS 模块具有以下功能 : 配置 UARTHS 参数 自动收取数据到缓冲区 12.3 API 参考 对应的头文件 uarths.h 为用户提供以下接口 uarths_init uarths_config uarths_receive_data uarths_send_data uarths_set_irq uarths_get_interrupt_mode uarths_set_interrupt_cnt

152 第 12 章高速通用异步收发传输器 (UARTHS) uarths_init 描述初始化 UARTHS, 系统默认波特率为 bit 1 位停止位无检验位 因为 uarths 时钟源为 PLL0, 在设置 PLL0 后需要重新调用该函数设置波特率, 否则会打印乱码 函数原型 void uarths_init ( void ) 参数 返回值 uarths_config 描述 设置 UARTHS 的参数 默认 8bit 数据, 无校验位 函数原型 void uarths_config ( uint32_t baud_rate, uarths_stopbit_t stopbit ) 参数 参数名称描述输入输出 baud_rate 波特率输入 stopbit 停止位输入 返回值

153 第 12 章高速通用异步收发传输器 (UARTHS) uarths_receive_data 描述 通过 UARTHS 读取数据 函数原型 size_t uarths_receive_data ( uint8_t buf, size_t buf_len ) 参数 参数名称描述输入输出 buf 接收数据输出 buf_len 接收数据的长度输入 返回值 已接收到的数据长度 uarths_send_data 描述 通过 UART 发送数据 函数原型 size_t uarths_send_data ( const uint8_t buf, size_t buf_len ) 参数 参数名称描述输入输出 buf 待发送数据输入 buf_len 待发送数据的长度输入 返回值 已发送数据的长度

154 第 12 章高速通用异步收发传输器 (UARTHS) uarths_set_irq 描述 设置 UARTHS 中断回调函数 函数原型 void uarths_set_irq ( uarths_interrupt_mode_t interrupt_mode, plic_irq_callback_t uarths_callback, void ctx, uint32_t priority ) 参数 参数名称 描述 输入输出 interrupt_mode 中断类型 输入 uarths_callback 中断回调函数 输入 ctx 回调函数的参数 输入 priority 中断优先级 输入 返回值 uarths_get_interrupt_mode 描述 获取 UARTHS 的中断类型 接收 发送或接收发送同时中断 函数原型 uarths_interrupt_mode_t uarths_get_interrupt_mode ( void ) 参数 无 返回值 当前中断的类型

155 第 12 章高速通用异步收发传输器 (UARTHS) uarths_set_interrupt_cnt 描述设置 UARTHS 中断时的 FIFO 深度 当中断类型为 UARTHS_SEND_RECEIVE, 发送接收 FIFO 中断深度均为 cnt; 函数原型 void uarths_set_interrupt_cnt ( uarths_interrupt_mode_t interrupt_mode, uint8_t cnt ) 参数 参数名称描述输入输出 interrupt_mode 中断类型输入 cnt FIFO 深度输入 返回值 举例 / 设置接收中断中断 FIFO 深度为 0, 即接收到数据立即中断并读取接收到的数据 / int uarths_irq ( void ctx) { if (! uarths_receive_data (( uint8_t )& receive_char, 1)) printf (" Uarths receive ERR!\ n"); return 0; } plic_init (); uarths_set_interrupt_cnt ( UARTHS_RECEIVE, 0); uarths_set_irq ( UARTHS_RECEIVE, uarths_irq, NULL, 4); sysctl_enable_irq (); 12.4 数据类型 相关数据类型 数据结构定义如下 :

156 第 12 章高速通用异步收发传输器 (UARTHS) 150 uarths_interrupt_mode_t: 中断类型 uarths_stopbit_t: 停止位 uarths_interrupt_mode_t 描述 UARTHS 中断类型 定义 typedef enum _uarths_interrupt_mode { UARTHS_SEND = 1, UARTHS_RECEIVE = 2, UARTHS_SEND_RECEIVE = 3, } uarths_interrupt_mode_t ; 成员 成员名称 UARTHS_SEND UARTHS_RECEIVE UARTHS_SEND_RECEIVE 描述发送中断接收中断发送接收中断 uarths_stopbit_t 描述 : UARTHS 停止位 定义 typedef enum _uarths_stopbit { UART_STOP_1, UART_STOP_2 } uarths_stopbit_t ; 成员

157 第 12 章高速通用异步收发传输器 (UARTHS) 151 成员名称 UART_STOP_1 UART_STOP_2 描述 1 位停止位 2 位停止位

158 152 第 13 章 看门狗定时器 (WDT) 13.1 概述 WDT 提供系统出错或无响应时的恢复功能 13.2 功能描述 WDT 模块具有以下功能 : 配置超时时间 手动重启计时 13.3 API 参考 对应的头文件 wdt.h 为用户提供以下接口 wdt_init wdt_start(0.6.0 后不再支持, 请使用 wdt_init) wdt_stop wdt_feed wdt_clear_interrupt

159 第 13 章看门狗定时器 (WDT) wdt_init 描述 配置参数, 启动看门狗 不使用中断的话, 将 on_irq 设置为 NULL 函数原型 uint32_t wdt_init ( wdt_device_number_t id, uint64_t time_out_ms, plic_irq_callback_t on_irq, void ctx) 参数 参数名称 描述 输入输出 id 看门狗编号 输入 time_out_ms 超时时间 ( 毫秒 ) 输入 on_irq 中断回调函数 输入 ctx 回调函数参数 输入 返回值 看门狗超时重启的实际时间 ( 毫秒 ) 与 time_out_ms 有差异, 一般情况会大于这个时间 在外部晶 振 26M 的情况下, 最大超时时间为 330 毫秒 wdt_start 描述 启动看门狗 函数原型 void wdt_start ( wdt_device_number_t id, uint64_t time_out_ms, plic_irq_callback_t on_irq ) 参数 参数名称描述输入输出 id 看门狗编号输入

160 第 13 章看门狗定时器 (WDT) 154 参数名称描述输入输出 time_out_ms 超时时间 ( 毫秒 ) 输入 on_irq 中断回调函数输入 返回值 无 wdt_stop 描述 关闭看门狗 函数原型 void wdt_stop ( wdt_device_number_t id) 参数 参数名称描述输入输出 id 看门狗编号输入 返回值 wdt_feed 描述 喂狗 函数原型 void wdt_feed ( wdt_device_number_t id) 参数

161 第 13 章看门狗定时器 (WDT) 155 参数名称描述输入输出 id 看门狗编号输入 返回值 wdt_clear_interrupt 描述 清除中断 如果在中断函数中清除中断, 则看门狗不会重启 函数原型 void wdt_clear_interrupt ( wdt_device_number_t id) 参数 参数名称描述输入输出 id 看门狗编号输入 返回值 举例 / 2 秒后进入看门狗中断函数打印 H e l l o _ w o r l d, 再过 2s 复位 / int wdt0_irq ( void ctx) { printf (" Hello_world \n"); return 0; } plic_init (); sysctl_enable_irq (); wdt_init ( WDT_DEVICE_0, 2000, wdt0_irq, NULL );

162 第 13 章看门狗定时器 (WDT) 数据类型 相关数据类型 数据结构定义如下 : wdt_device_number_t wdt_device_number_t 描述 看门狗编号 定义 typedef enum _wdt_device_number { WDT_DEVICE_0, WDT_DEVICE_1, WDT_DEVICE_MAX, } wdt_device_number_t ; 成员 成员名称 描述 WDT_DEVICE_0 看门狗 0 WDT_DEVICE_1 看门狗 1

163 157 第 14 章 直接内存存取控制器 (DMAC) 14.1 概述 直接存储访问 (Direct Memory Access, DMA) 用于在外设与存储器之间以及存储器与存储器之间提供高速数据传输 可以在无需任何 CPU 操作的情况下通过 DMA 快速移动数据, 从而提高了 CPU 的效率 14.2 功能描述 DMA 模块具有以下功能 : 自动选择一路空闲的 DMA 通道用于传输 根据源地址和目标地址自动选择软件或硬件握手协议 支持 字节的元素大小, 源和目标大小不必一致 异步或同步传输功能 循环传输功能, 常用于刷新屏幕或音频录放等场景 14.3 API 参考 对应的头文件 dmac.h 为用户提供以下接口 dmac_init dmac_set_single_mode dmac_is_done dmac_wait_done

164 第 14 章直接内存存取控制器 (DMAC) 158 dmac_set_irq dmac_set_src_dest_length dmac_is_idle dmac_wait_idle dmac_init 描述 初始化 DMA 函数原型 void dmac_init ( void ) 参数 返回值 dmac_set_single_mode 描述 设置单路 DMA 参数 函数原型 void dmac_set_single_mode ( dmac_channel_number_t channel_num, const void src, void dest, dmac_address_increment_t src_inc, dmac_address_increment_t dest_inc, dmac_burst_trans_length_t dmac_burst_size, dmac_transfer_width_t dmac_trans_width, size_t block_size ) 参数 参数名称描述输入输出 channel_num DMA 通道号输入 src 源地址输入

165 第 14 章直接内存存取控制器 (DMAC) 159 参数名称 描述 输入输出 dest 目标地址 输出 src_inc 源地址是否自增 输入 dest_inc 目标地址是否自增 输入 dmac_burst_size 突发传输数量 输入 dmac_trans_width 单次传输数据位宽 输入 block_size 传输数据的个数 输入 返回值 dmac_is_done 描述 用于 DMAC 启动后判断是否完成传输 用于 DMAC 启动传输后, 如果在启动前判断会不准确 函数原型 int dmac_is_done ( dmac_channel_number_t channel_num ) 参数 参数名称描述输入输出 channel_num DMA 通道号输入 返回值 返回值 描述 0 未完成 1 已完成 dmac_wait_done 描述 等待 DMA 完成工作

166 第 14 章直接内存存取控制器 (DMAC) 函数原型 void dmac_wait_done ( dmac_channel_number_t channel_num ) 参数 参数名称描述输入输出 channel_num DMA 通道号输入 返回值 dmac_set_irq 描述 设置 DMAC 中断的回调函数 函数原型 void dmac_set_irq ( dmac_channel_number_t channel_num, plic_irq_callback_t dmac_callback, void ctx, uint32_t priority ) 参数 参数名称 描述 输入输出 channel_num DMA 通道号 输入 dmac_callback 中断回调函数 输入 ctx 回调函数的参数 输入 priority 中断优先级 输入 返回值

167 第 14 章直接内存存取控制器 (DMAC) dmac_set_src_dest_length 描述 设置 DMAC 的源地址 目的地址和长度, 然后启动 DMAC 传输 如果 src 为 NULL 则不设置源地址, dest 为 NULL 则不设置目的地址,len<=0 则不设置长度 该函数一般用于 DMAC 中断中, 使 DMA 继续传输数据, 而不必再次设置 DMAC 的所有参数以节省时间 函数原型 void dmac_set_src_dest_length ( dmac_channel_number_t channel_num, const void src, void dest, size_t len) 参数 参数名称 描述 输入输出 channel_num DMA 通道号 输入 src 中断回调函数 输入 dest 回调函数的参数 输入 len 传输长度 输入 返回值 dmac_is_idle 描述 判断 DMAC 当前通道是否空闲, 该函数在传输前和传输后都可以用来判断 DMAC 状态 函数原型 int dmac_is_idle ( dmac_channel_number_t channel_num ) 参数

168 第 14 章直接内存存取控制器 (DMAC) 162 参数名称描述输入输出 channel_num DMA 通道号输入 返回值 返回值 描述 0 忙 1 空闲 dmac_wait_idle 描述 等待 DMAC 进入空闲状态 参数 参数名称描述输入输出 channel_num DMA 通道号输入 返回值 举例 / I2C 通过 DMA 发送 128 个 int 数据 / uint32_t buf [128]; dmac_wait_idle ( SYSCTL_DMA_CHANNEL_0 ); sysctl_dma_select ( SYSCTL_DMA_CHANNEL_0, SYSCTL_DMA_SELECT_I2C0_TX_REQ ); dmac_set_single_mode ( SYSCTL_DMA_CHANNEL_0, buf, ( void )(& i2c_adapter -> data_cmd ), DMAC_ADDR_INCREMENT, DMAC_ADDR_NOCHANGE, DMAC_MSIZE_4, DMAC_TRANS_WIDTH_32, 128); dmac_wait_done ( SYSCTL_DMA_CHANNEL_0 ); 14.4 数据类型 相关数据类型 数据结构定义如下 : dmac_channel_number_t:dma 通道编号

169 第 14 章直接内存存取控制器 (DMAC) 163 dmac_address_increment_t: 地址增长方式 dmac_burst_trans_length_t: 突发传输数量 dmac_transfer_width_t: 单次传输数据位数 dmac_channel_number_t 描述 DMA 通道编号 定义 typedef enum _dmac_channel_number { DMAC_CHANNEL0 = 0, DMAC_CHANNEL1 = 1, DMAC_CHANNEL2 = 2, DMAC_CHANNEL3 = 3, DMAC_CHANNEL4 = 4, DMAC_CHANNEL5 = 5, DMAC_CHANNEL_MAX } dmac_channel_number_t ; 成员 成员名称 描述 DMAC_CHANNEL0 DMA 通道 0 DMAC_CHANNEL1 DMA 通道 1 DMAC_CHANNEL2 DMA 通道 2 DMAC_CHANNEL3 DMA 通道 3 DMAC_CHANNEL4 DMA 通道 4 DMAC_CHANNEL5 DMA 通道 dmac_address_increment_t 描述 地址增长方式 定义

170 第 14 章直接内存存取控制器 (DMAC) 164 typedef enum _dmac_address_increment { DMAC_ADDR_INCREMENT = 0x0, DMAC_ADDR_NOCHANGE = 0x1 } dmac_address_increment_t ; 成员 成员名称 DMAC_ADDR_INCREMENT DMAC_ADDR_NOCHANGE 描述 地址自动增长 地址不变 dmac_burst_trans_length_t 描述 突发传输数量 定义 typedef enum _dmac_burst_trans_length { DMAC_MSIZE_1 = 0x0, DMAC_MSIZE_4 = 0x1, DMAC_MSIZE_8 = 0x2, DMAC_MSIZE_16 = 0x3, DMAC_MSIZE_32 = 0x4, DMAC_MSIZE_64 = 0x5, DMAC_MSIZE_128 = 0x6, DMAC_MSIZE_256 = 0x7 } dmac_burst_trans_length_t ; 成员 成员名称 描述 DMAC_MSIZE_1 单次传输数量乘 1 DMAC_MSIZE_4 单次传输数量乘 4 DMAC_MSIZE_8 单次传输数量乘 8 DMAC_MSIZE_16 单次传输数量乘 16 DMAC_MSIZE_32 单次传输数量乘 32 DMAC_MSIZE_64 单次传输数量乘 64

171 第 14 章直接内存存取控制器 (DMAC) 165 成员名称 描述 DMAC_MSIZE_128 单次传输数量乘 128 DMAC_MSIZE_256 单次传输数量乘 dmac_transfer_width_t 描述 单次传输数据位数 定义 typedef enum _dmac_transfer_width { DMAC_TRANS_WIDTH_8 = 0x0, DMAC_TRANS_WIDTH_16 = 0x1, DMAC_TRANS_WIDTH_32 = 0x2, DMAC_TRANS_WIDTH_64 = 0x3, DMAC_TRANS_WIDTH_128 = 0x4, DMAC_TRANS_WIDTH_256 = 0x5 } dmac_transfer_width_t ; 成员 成员名称 DMAC_TRANS_WIDTH_8 DMAC_TRANS_WIDTH_16 DMAC_TRANS_WIDTH_32 DMAC_TRANS_WIDTH_64 DMAC_TRANS_WIDTH_128 DMAC_TRANS_WIDTH_256 描述单次传输 8 位单次传输 16 位单次传输 32 位单次传输 64 位单次传输 128 位单次传输 256 位

172 166 第 15 章 集成电路内置总线 (I²C) 15.1 概述 I2C 总线用于和多个外部设备进行通信 多个外部设备可以共用一个 I2C 总线 15.2 功能描述 I2C 模块具有以下功能 : 独立的 I2C 设备封装外设相关参数 自动处理多设备总线争用 15.3 API 参考 对应的头文件 i2c.h 为用户提供以下接口 i2c_init i2c_init_as_slave i2c_send_data i2c_send_data_dma i2c_recv_data i2c_recv_data_dma i2c_handle_data_dma

173 第 15 章集成电路内置总线 (I²C) i2c_init 描述 配置 I²C 器件从地址 寄存器位宽度和 I²C 速率 函数原型 void i2c_init ( i2c_device_number_t i2c_num, uint32_t slave_address, uint32_t address_width, uint32_t i2c_clk ) 参数 参数名称 描述 输入输出 i2c_num I²C 号 输入 slave_address I²C 器件从地址 输入 address_width I²C 器件寄存器宽度 (7 或 10) 输入 i2c_clk I²C 速率 (Hz) 输入 返回值 i2c_init_as_slave 描述 配置 I²C 为从模式 函数原型 void i2c_init_as_slave ( i2c_device_number_t i2c_num, uint32_t slave_address, uint32_t address_width, const i2c_slave_handler_t handler ) 参数 参数名称描述输入输出 i2c_num I²C 号输入 slave_address I²C 从模式的地址输入

174 第 15 章集成电路内置总线 (I²C) 168 参数名称描述输入输出 address_width I²C 器件寄存器宽度 (7 或 10) 输入 handler I²C 从模式的中断处理函数输入 返回值 i2c_send_data 描述 写数据 函数原型 int i2c_send_data ( i2c_device_number_t i2c_num, const uint8_t send_buf, size_t send_buf_len ) 参数 参数名称 描述 输入输出 i2c_num I²C 号 输入 send_buf 待传输数据 输入 send_buf_len 待传输数据长度 输入 返回值 返回值 描述 0 成功 非 0 失败 i2c_send_data_dma 描述 通过 DMA 写数据

175 第 15 章集成电路内置总线 (I²C) 函数原型 void i2c_send_data_dma ( dmac_channel_number_t dma_channel_num, i2c_device_number_t i2c_num, const uint8_t send_buf, size_t send_buf_len ) 参数 参数名称 描述 输入输出 dma_channel_num 使用的 dma 通道号 输入 i2c_num I²C 号 输入 send_buf 待传输数据 输入 send_buf_len 待传输数据长度 输入 返回值 无 i2c_recv_data 描述 通过 CPU 读数据 函数原型 int i2c_recv_data ( i2c_device_number_t i2c_num, const uint8_t send_buf, size_t send_buf_len, uint8_t receive_buf, size_t receive_buf_len ) 参数 参数名称 描述 输入输出 i2c_num I²C 总线号 输入 send_buf 待传输数据, 一般情况是 i2c 外设的寄存器, 如果没有设置为 NULL 输入 send_buf_len 待传输数据长度, 如果没有则写 0 输入 receive_buf 接收数据内存 输出 receive_buf_len 接收数据的长度 输入

176 第 15 章集成电路内置总线 (I²C) 返回值 返回值 描述 0 成功 非 0 失败 i2c_recv_data_dma 描述 通过 dma 读数据 函数原型 void i2c_recv_data_dma ( dmac_channel_number_t dma_send_channel_num, dmac_channel_number_t dma_receive_channel_num, i2c_device_number_t i2c_num, const uint8_t send_buf, size_t send_buf_len, uint8_t receive_buf, size_t receive_buf_len ) 参数 参数名称 描述 输入输出 dma_send_channel_num 发送数据使用的 dma 通道 输入 dma_receive_channel_num 接收数据使用的 dma 通道 输入 i2c_num I²C 总线号 输入 send_buf 待传输数据, 一般情况是 i2c 外设的寄存器, 如果没有设置为 NULL 输入 send_buf_len 待传输数据长度, 如果没有则写 0 输入 receive_buf 接收数据内存 输出 receive_buf_len 接收数据的长度 输入 返回值 无 i2c_handle_data_dma 描述 I2C 使用 dma 传输数据 函数原型

177 第 15 章集成电路内置总线 (I²C) 171 void i2c_handle_data_dma ( i2c_device_number_t i2c_num, i2c_data_t data, plic_interrupt_t cb ); 参数 参数名称 描述 输入输出 i2c_num I²C 总线号 输入 data I2C 数据相关的参数, 详见 i2cdatat 说明 输入 cb dma 中断回调函数, 如果设置为 NULL 则为阻塞模式, 直至传输完毕后退出函数 输入 返回值 无 举例 / i2c 外设地址是 0x32, 7 位地址, 速率 200K / i2c_init ( I2C_DEVICE_0, 0x32, 7, ); uint8_t reg = 0; uint8_t data_buf [2] = {0 x00,0 x01} data_buf [0] = reg; / 向 0 寄存器写 0x01 / i2c_send_data ( I2C_DEVICE_0, data_buf, 2); i2c_send_data_dma ( DMAC_CHANNEL0, I2C_DEVICE_0, data_buf, 4); / 从 0 寄存器读取 1 字节数据 / i2c_receive_data ( I2C_DEVICE_0, & reg, 1, data_buf, 1); i2c_receive_data_dma ( DMAC_CHANNEL0, DMAC_CHANNEL1, I2C_DEVICE_0,& reg, 1, data_buf, 1); 15.4 数据类型 相关数据类型 数据结构定义如下 : i2c_device_number_t:i2c 号 i2c_slave_handler_t:i2c 从模式的中断处理函数句柄 i2c_data_t: 使用 dma 传输时数据相关的参数 i2c_transfer_mode_t: 使用 DMA 传输数据的模式, 发送或接收

178 第 15 章集成电路内置总线 (I²C) i2c_device_number_t 描述 i2c 编号 定义 typedef enum _i2c_device_number { I2C_DEVICE_0, I2C_DEVICE_1, I2C_DEVICE_2, I2C_DEVICE_MAX, } i2c_device_number_t ; i2c_slave_handler_t 描述 i2c 从模式的中断处理函数句柄 根据不同的中断状态执行相应的函数操作 定义 typedef struct _i2c_slave_handler { void ( on_receive )( uint32_t data ); uint32_t ( on_transmit )(); void ( on_event )( i2c_event_t event ); } i2c_slave_handler_t ; 成员 成员名称 描述 I2C_DEVICE_0 I2C 0 I2C_DEVICE_1 I2C 1 I2C_DEVICE_2 I2C 2

179 第 15 章 集成电路内置总线 (I²C) i2c_data_t 描述 使用 dma 传输时数据相关的参数 定义 typedef struct _i2c_data_t { dmac_channel_number_t tx_channel ; dmac_channel_number_t rx_channel ; uint32_t tx_buf ; size_t tx_len ; uint32_t rx_buf ; size_t rx_len ; i2c_transfer_mode_t transfer_mode ; } i2c_data_t ; 成员 成员名称 tx_channel rx_channel tx_buf tx_len rx_buf rx_len transfer_mode 描述发送时使用的 DMA 通道号发送时使用的 DMA 通道号发送的数据发送数据的长度接收的数据接收数据长度传输模式, 发送或接收 i2c_transfer_mode_t 描述 使用 DMA 传输数据的模式, 发送或接收 定义 typedef enum _i2c_transfer_mode { I2C_SEND, I2C_RECEIVE, } i2c_transfer_mode_t ;

180 第 15 章集成电路内置总线 (I²C) 成员 成员名称 I2C_SEND I2C_RECEIVE 描述 发送 接收

181 175 第 16 章 串行外设接口 (SPI) 16.1 概述 SPI 是一种高速的, 全双工, 同步的通信总线 16.2 功能描述 SPI 模块具有以下功能 : 独立的 SPI 设备封装外设相关参数 自动处理多设备总线争用 支持标准 双线 四线 八线模式 支持先写后读和全双工读写 支持发送一串相同的数据帧, 常用于清屏 填充存储扇区等场景 16.3 API 参考 对应的头文件 spi.h 为用户提供以下接口 spi_init spi_init_non_standard spi_send_data_standard spi_send_data_standard_dma spi_receive_data_standard spi_receive_data_standard_dma

182 第 16 章串行外设接口 (SPI) 176 spi_send_data_multiple spi_send_data_multiple_dma spi_receive_data_multiple spi_receive_data_multiple_dma spi_fill_data_dma spi_send_data_normal_dma spi_set_clk_rate spi_handle_data_dma spi_init 描述 设置 SPI 工作模式 多线模式和位宽 函数原型 void spi_init ( spi_device_num_t spi_num, spi_work_mode_t work_mode, spi_frame_format_t frame_format, size_t data_bit_length, uint32_t endian ) 参数 参数名称 描述 输入输出 spi_num SPI 号 输入 work_mode 极性相位的四种模式 输入 frame_format 多线模式 输入 data_bit_length 单次传输的数据的位宽 输入 endian 大小端 0: 小端 1: 大端 输入 返回值 spi_config_non_standard 描述 多线模式下设置指令长度 地址长度 等待时钟数 指令地址传输模式

183 第 16 章串行外设接口 (SPI) 函数原型 void spi_init_non_standard ( spi_device_num_t spi_num, uint32_t instruction_length, uint32_t address_length, uint32_t wait_cycles, spi_instruction_address_trans_mode_t instruction_address_trans_mode ) 参数 参数名称 描述 输入输出 spi_num SPI 号 输入 instruction_length 发送指令的位数 输入 address_length 发送地址的位数 输入 wait_cycles 等待时钟个数 输入 instruction_address_trans_mode 指令地址传输的方式 输入 返回值 无 spi_send_data_standard 描述 SPI 标准模式传输数据 函数原型 void spi_send_data_standard ( spi_device_num_t spi_num, spi_chip_select_t chip_select, const uint8_t cmd_buff, size_t cmd_len, const uint8_t tx_buff, size_t tx_len ) 参数 参数名称 描述 输入输出 spi_num SPI 号 输入 chip_select 片选信号 输入 cmd_buff 外设指令地址数据, 没有则设为 NULL 输入 cmd_len 外设指令地址数据长度, 没有则设为 0 输入 tx_buff 发送的数据 输入

184 第 16 章串行外设接口 (SPI) 178 参数名称描述输入输出 tx_len 发送数据的长度输入 返回值 无 spi_send_data_standard_dma 描述 SPI 标准模式下使用 DMA 传输数据 函数原型 void spi_send_data_standard_dma ( dmac_channel_number_t channel_num, spi_device_num_t spi_num, spi_chip_select_t chip_select, const uint8_t cmd_buff, size_t cmd_len, const uint8_t tx_buff, size_t tx_len ) 参数 参数名称 描述 输入输出 channel_num DMA 通道号 输入 spi_num SPI 号 输入 chip_select 片选信号 输入 cmd_buff 外设指令地址数据, 没有则设为 NULL 输入 cmd_len 外设指令地址数据长度, 没有则设为 0 输入 tx_buff 发送的数据 输入 tx_len 发送数据的长度 输入 返回值 无 spi_receive_data_standard 描述 标准模式下接收数据

185 第 16 章串行外设接口 (SPI) 函数原型 void spi_receive_data_standard ( spi_device_num_t spi_num, spi_chip_select_t chip_select, const uint8_t cmd_buff, size_t cmd_len, uint8_t rx_buff, size_t rx_len ) 参数 参数名称 描述 输入输出 spi_num SPI 号 输入 chip_select 片选信号 输入 cmd_buff 外设指令地址数据, 没有则设为 NULL 输入 cmd_len 外设指令地址数据长度, 没有则设为 0 输入 rx_buff 接收的数据 输出 rx_len 接收数据的长度 输入 返回值 无 spi_receive_data_standard_dma 描述 标准模式下通过 DMA 接收数据 函数原型 void spi_receive_data_standard_dma ( dmac_channel_number_t dma_send_channel_num, dmac_channel_number_t dma_receive_channel_num, spi_device_num_t spi_num, spi_chip_select_t chip_select, const uint8_t cmd_buff, size_t cmd_len, uint8_t rx_buff, size_t rx_len ) 参数 参数名称 描述 输入输出 dma_send_channel_num 发送指令地址使用的 DMA 通道号 输入 dma_receive_channel_num 接收数据使用的 DMA 通道号 输入 spi_num SPI 号 输入

186 第 16 章串行外设接口 (SPI) 180 参数名称 描述 输入输出 chip_select 片选信号 输入 cmd_buff 外设指令地址数据, 没有则设为 NULL 输入 cmd_len 外设指令地址数据长度, 没有则设为 0 输入 rx_buff 接收的数据 输出 rx_len 接收数据的长度 输入 返回值 无 spi_send_data_multiple 描述 多线模式发送数据 函数原型 void spi_send_data_multiple ( spi_device_num_t spi_num, spi_chip_select_t chip_select, const uint32_t cmd_buff, size_t cmd_len, uint8_t tx_buff, size_t tx_len ) 参数 参数名称 描述 输入输出 spi_num SPI 号 输入 chip_select 片选信号 输入 cmd_buff 外设指令地址数据, 没有则设为 NULL 输入 cmd_len 外设指令地址数据长度, 没有则设为 0 输入 tx_buff 发送的数据 输入 tx_len 发送数据的长度 输入 返回值 无

187 第 16 章串行外设接口 (SPI) spi_send_data_multiple_dma 描述 多线模式使用 DMA 发送数据 函数原型 void spi_send_data_multiple_dma ( dmac_channel_number_t channel_num, spi_device_num_t spi_num, spi_chip_select_t chip_select, const uint32_t cmd_buff, size_t cmd_len, const uint8_t tx_buff, size_t tx_len ) 参数 参数名称 描述 输入输出 channel_num DMA 通道号 输入 spi_num SPI 号 输入 chip_select 片选信号 输入 cmd_buff 外设指令地址数据, 没有则设为 NULL 输入 cmd_len 外设指令地址数据长度, 没有则设为 0 输入 tx_buff 发送的数据 输入 tx_len 发送数据的长度 输入 返回值 无 spi_receive_data_multiple 描述 多线模式接收数据 函数原型 void spi_receive_data_multiple ( spi_device_num_t spi_num, spi_chip_select_t chip_select, const uint32_t cmd_buff, size_t cmd_len, uint8_t rx_buff, size_t rx_len ) 参数

188 第 16 章串行外设接口 (SPI) 182 参数名称 描述 输入输出 spi_num SPI 号 输入 chip_select 片选信号 输入 cmd_buff 外设指令地址数据, 没有则设为 NULL 输入 cmd_len 外设指令地址数据长度, 没有则设为 0 输入 rx_buff 接收的数据 输出 rx_len 接收数据的长度 输入 返回值 无 spi_receive_data_multiple_dma 描述 多线模式通过 DMA 接收 函数原型 void spi_receive_data_multiple_dma ( dmac_channel_number_t dma_send_channel_num, dmac_channel_number_t dma_receive_channel_num, spi_device_num_t spi_num, spi_chip_select_t chip_select, uint32_t const cmd_buff, size_t cmd_len, uint8_t rx_buff, size_t rx_len ); 参数 参数名称 描述 输入输出 dma_send_channel_num 发送指令地址使用的 DMA 通道号 输入 dma_receive_channel_num 接收数据使用的 DMA 通道号 输入 spi_num SPI 号 输入 chip_select 片选信号 输入 cmd_buff 外设指令地址数据, 没有则设为 NULL 输入 cmd_len 外设指令地址数据长度, 没有则设为 0 输入 rx_buff 接收的数据 输出 rx_len 接收数据的长度 输入

189 第 16 章串行外设接口 (SPI) 返回值 无 spi_fill_data_dma 描述 通过 DMA 始终发送同一个数据, 可以用于刷新数据 函数原型 void spi_fill_data_dma ( dmac_channel_number_t channel_num, spi_device_num_t spi_num, spi_chip_select_t chip_select, const uint32_t tx_buff, size_t tx_len ); 参数 参数名称 描述 输入输出 channel_num DMA 通道号 输入 spi_num SPI 号 输入 chip_select 片选信号 输入 tx_buff 发送的数据, 仅发送 tx_buff 这一个数据, 不会自动增加 输入 tx_len 发送数据的长度 输入 返回值 无 spi_send_data_normal_dma 描述 通过 DMA 发送数据 不用设置指令地址 函数原型 void spi_send_data_normal_dma ( dmac_channel_number_t channel_num, spi_device_num_t spi_num, spi_chip_select_t chip_select, const void tx_buff, size_t tx_len, spi_transfer_width_t spi_transfer_width ) 参数

190 第 16 章串行外设接口 (SPI) 184 参数名称 描述 输入输出 channel_num DMA 通道号 输入 spi_num SPI 号 输入 chip_select 片选信号 输入 tx_buff 发送的数据, 仅发送 tx_buff 这一个数据, 不会自动增加 输入 tx_len 发送数据的长度 输入 spi_transfer_width 发送数据的位宽 输入 返回值 无 spi_handle_data_dma 描述 SPI 通过 DMA 传输数据 函数原型 void spi_handle_data_dma ( spi_device_num_t spi_num, spi_chip_select_t chip_select, spi_data_t data, plic_interrupt_t cb) 参数 参数名称 描述 输入输出 spi_num SPI 号 输入 data SPI 数据相关的参数, 详见 spidatat 说明 输入 cb dma 中断回调函数, 如果设置为 NULL 则为阻塞模式, 直至传输完毕后退出函数 输入 返回值 无 举例 / SPI0 工作在 MODE0 模式标准 SPI 模式单次发送 8 位数据 / spi_init ( SPI_DEVICE_0, SPI_WORK_MODE_0, SPI_FF_STANDARD, 8, 0); uint8_t cmd [4];

191 第 16 章串行外设接口 (SPI) 185 cmd [0] = 0x06; cmd [1] = 0x01; cmd [2] = 0x02; cmd [3] = 0x04; uint8_t data_buf [4] = {0,1,2,3}; / SPI0 使用片选 0 发送指令 0x06 向地址 0x 发送 0,1,2,3 四个字节数据 / spi_send_data_standard ( SPI_DEVICE_0, SPI_CHIP_SELECT_0, cmd, 4, data_buf, 4); / SPI0 使用片选 0 发送指令 0x06 地址 0x 接收 4 个字节的数据 / spi_receive_data_standard ( SPI_DEVICE_0, SPI_CHIP_SELECT_0, cmd, 4, data_buf, 4); / SPI0 工作在 MODE0 模式四线 SPI 模式单次发送 8 位数据 / spi_init ( SPI_DEVICE_0, SPI_WORK_MODE_0, SPI_FF_QUAD, 8, 0); / 8 位指令长度 32 位地址长度发送指令地址后等待 4 个 c l k, 指令通过标准 SPI 方式发送, 地址通过四线方式发送 / spi_init_non_standard ( SPI_DEVICE_0, 8, 32, 4, SPI_AITM_ADDR_STANDARD ); uint32 cmd [2]; cmd [0] = 0x06; cmd [1] = 0 x ; uint8_t data_buf [4] = {0,1,2,3}; / SPI0 使用片选 0 发送指令 0x06 向地址 0x 发送 0,1,2,3 四个字节数据 / spi_send_data_multiple ( SPI_DEVICE_0, SPI_CHIP_SELECT_0, cmd, 2, data_buf, 4); / SPI0 使用片选 0 发送指令 0x06 地址 0x 接收 4 个字节的数据 / spi_receive_data_multiple ( SPI_DEVICE_0, SPI_CHIP_SELECT_0, cmd, 2, data_buf, 4); / SPI0 工作在 MODE2 模式八线 SPI 模式单次发送 32 位数据 / spi_init ( SPI_DEVICE_0, SPI_WORK_MODE_2, SPI_FF_OCTAL, 32, 0); / 无指令 32 位地址长度发送指令地址后等待 0 个 c l k, 指令地址通过 8 线发送 / spi_init_non_standard ( SPI_DEVICE_0, 0, 32, 0, SPI_AITM_AS_FRAME_FORMAT ); uint32_t data_buf [256] = {0}; / 使用 DMA 通道 0 片选 0 发送 256 个 int 数据 / spi_send_data_normal_dma ( DMAC_CHANNEL0, SPI_DEVICE_0, SPI_CHIP_SELECT_0, data_buf, 256, SPI_TRANS_INT ); uint32_t data = 0 x55aa55aa ; / 使用 DMA 通道 0 片选 0 连续发送 256 个 0 x55aa55aa / spi_fill_data_dma ( DMAC_CHANNEL0, SPI_DEVICE_0, SPI_CHIP_SELECT_0,& data, 256); spi_set_clk_rate 描述 设置 SPI 的时钟频率 函数原型 uint32_t spi_set_clk_rate ( spi_device_num_t spi_num, uint32_t spi_clk ) 参数

192 第 16 章串行外设接口 (SPI) 186 参数名称描述输入输出 spi_num SPI 号输入 spi_clk 目标 SPI 设备的时钟频率输入 返回值 设置完后的 SPI 设备的时钟频率 16.4 数据类型 相关数据类型 数据结构定义如下 : spi_device_num_t:spi 编号 spi_mode_t:spi 模式 spi_frame_format_t:spi 帧格式 spi_instruction_address_trans_mode_t:spi 指令和地址的传输模式 spi_data_t: 使用 dma 传输时数据相关的参数 spi_transfer_mode_t:spi 传输的方式 spi_device_num_t 描述 SPI 编号 定义 typedef enum _spi_device_num { SPI_DEVICE_0, SPI_DEVICE_1, SPI_DEVICE_2, SPI_DEVICE_3, SPI_DEVICE_MAX, } spi_device_num_t ; 成员 成员名称 SPI_DEVICE_0 描述 SPI 0 做为主设备

193 第 16 章串行外设接口 (SPI) 187 成员名称 SPI_DEVICE_1 SPI_DEVICE_2 SPI_DEVICE_3 描述 SPI 1 做为主设备 SPI 2 做为从设备 SPI 3 做为主设备 spi_mode_t 描述 SPI 模式 定义 typedef enum _spi_mode { SPI_WORK_MODE_0, SPI_WORK_MODE_1, SPI_WORK_MODE_2, SPI_WORK_MODE_3, } spi_mode_t ; 成员 成员名称 描述 SPI_WORK_MODE_0 SPI 模式 0 SPI_WORK_MODE_1 SPI 模式 1 SPI_WORK_MODE_2 SPI 模式 2 SPI_WORK_MODE_3 SPI 模式 spi_frame_format_t 描述 SPI 帧格式 定义 typedef enum _spi_frame_format { SPI_FF_STANDARD, SPI_FF_DUAL,

194 第 16 章串行外设接口 (SPI) 188 SPI_FF_QUAD, SPI_FF_OCTAL } spi_frame_format_t ; 成员 成员名称 描述 SPI_FF_STANDARD 标准 SPI_FF_DUAL 双线 SPI_FF_QUAD 四线 SPI_FF_OCTAL 八线 (SPI3 不支持 ) spi_instruction_address_trans_mode_t 描述 SPI 指令和地址的传输模式 定义 typedef enum _spi_instruction_address_trans_mode { SPI_AITM_STANDARD, SPI_AITM_ADDR_STANDARD, SPI_AITM_AS_FRAME_FORMAT } spi_instruction_address_trans_mode_t ; 成员 成员名称 SPI_AITM_STANDARD SPI_AITM_ADDR_STANDARD SPI_AITM_AS_FRAME_FORMAT 描述均使用标准帧格式指令使用配置的值, 地址使用标准帧格式均使用配置的值 spi_data_t 描述 使用 dma 传输时数据相关的参数

195 第 16 章串行外设接口 (SPI) 定义 typedef struct _spi_data_t { dmac_channel_number_t tx_channel ; dmac_channel_number_t rx_channel ; uint32_t tx_buf ; size_t tx_len ; uint32_t rx_buf ; size_t rx_len ; spi_transfer_mode_t transfer_mode ; bool fill_mode ; } spi_data_t ; 成员 成员名称 tx_channel rx_channel tx_buf tx_len rx_buf rx_len transfer_mode fill_mode 描述发送时使用的 DMA 通道号发送时使用的 DMA 通道号发送的数据发送数据的长度接收的数据接收数据长度传输模式, 发送或接收是否以填充方式传输数据, 此种情况下 DMA 传输的源地址地址不会自增加 spi_transfer_mode_t 描述 SPI 传输的方式 定义 typedef enum _spi_transfer_mode { SPI_TMOD_TRANS_RECV, SPI_TMOD_TRANS, SPI_TMOD_RECV, SPI_TMOD_EEROM } spi_transfer_mode_t ;

196 第 16 章串行外设接口 (SPI) 成员 成员名称 SPI_TMOD_TRANS_RECV SPI_TMOD_TRANS SPI_TMOD_RECV SPI_TMOD_EEROM 描述全双工, 边发边收只发送只接收先发送后接收

197 191 第 17 章 集成电路内置音频总线 (I2S) 17.1 概述 I2S 标准总线定义了三种信号 : 时钟信号 BCK 声道选择信号 WS 和串行数据信号 SD 一个基本的 I2S 数据总线有一个主机和一个从机 主机和从机的角色在通信过程中保持不变 I2S 模块包含独立的发送和接收声道, 能够保证优良的通信性能 17.2 功能描述 I2S 模块具有以下功能 : 根据音频格式自动配置设备 ( 支持 位深,44100 采样率,1-4 声道 ) 可配置为播放或录音模式 自动管理音频缓冲区 17.3 API 参考 对应的头文件 i2s.h 为用户提供以下接口 i2s_init i2s_send_data_dma i2s_recv_data_dma i2s_rx_channel_config i2s_tx_channel_config i2s_play

198 第 17 章集成电路内置音频总线 (I2S) 192 i2s_set_sample_rate i2s_set_dma_divide_16 i2s_get_dma_divide_16 i2s_handle_data_dma i2s_init 描述 初始化 I2S 函数原型 void i2s_init ( i2s_device_number_t device_num, i2s_transmit_t rxtx_mode, uint32_t channel_mask ) 参数 成员名称 描述 输入输出 device_num I2S 号 输入 rxtx_mode 接收或发送模式 输入 channel_mask 通道掩码 输入 返回值 i2s_send_data_dma 描述 I2S 发送数据 函数原型 void i2s_send_data_dma ( i2s_device_number_t device_num, const void buf, size_t buf_len, dmac_channel_number_t channel_num ) 参数

199 第 17 章集成电路内置音频总线 (I2S) 193 成员名称 描述 输入输出 device_num I2S 号 输入 buf 发送数据地址 输入 buf_len 数据长度 输入 channel_num DMA 通道号 输入 返回值 i2s_recv_data_dma 描述 I2S 接收数据 函数原型 void i2s_recv_data_dma ( i2s_device_number_t device_num, uint32_t buf, size_t buf_len, dmac_channel_number_t channel_num ) 参数 成员名称 描述 输入输出 device_num I2S 号 输入 buf 接收数据地址 输出 buf_len 数据长度 输入 channel_num DMA 通道号 输入 返回值 无 i2s_rx_channel_config 描述 设置接收通道参数

200 第 17 章集成电路内置音频总线 (I2S) 函数原型 void i2s_rx_channel_config ( i2s_device_number_t device_num, i2s_channel_num_t channel_num, i2s_word_length_t word_length, i2s_word_select_cycles_t word_select_size, i2s_fifo_threshold_t trigger_level, i2s_work_mode_t word_mode ) 参数 成员名称 描述 输入输出 device_num I2S 号 输入 channel_num 通道号 输入 word_length 接收数据位数 输出 word_select_size 单个数据时钟数 输入 trigger_level DMA 触发时 FIFO 深度 输入 word_mode 工作模式 输入 返回值 i2s_tx_channel_config 描述 设置发送通道参数 函数原型 void i2s_tx_channel_config ( i2s_device_number_t device_num, i2s_channel_num_t channel_num, i2s_word_length_t word_length, i2s_word_select_cycles_t word_select_size, i2s_fifo_threshold_t trigger_level, i2s_work_mode_t word_mode ) 参数 成员名称 描述 输入输出 device_num I2S 号 输入 channel_num 通道号 输入 word_length 接收数据位数 输出

201 第 17 章集成电路内置音频总线 (I2S) 195 成员名称 描述 输入输出 word_select_size 单个数据时钟数 输入 trigger_level DMA 触发时 FIFO 深度 输入 word_mode 工作模式 输入 返回值 i2s_play 描述 发送 PCM 数据, 比如播放音乐 函数原型 void i2s_play ( i2s_device_number_t device_num, dmac_channel_number_t channel_num, const uint8_t buf, size_t buf_len, size_t frame, size_t bits_per_sample, uint8_t track_num ) 参数 成员名称 描述 输入输出 device_num I2S 号 输入 channel_num 通道号 输入 buf PCM 数据 输入 buf_len PCM 数据长度 输入 frame 单次发送数量 输入 bits_per_sample 单次采样位宽 输入 track_num 声道数 输入 返回值 i2s_set_sample_rate 描述 设置采样率

202 第 17 章集成电路内置音频总线 (I2S) 函数原型 uint32_t i2s_set_sample_rate ( i2s_device_number_t device_num, uint32_t sample_rate ) 参数 成员名称描述输入输出 device_num I2S 号输入 sample_rate 采样率输入 返回值 实际的采样率 i2s_set_dma_divide_ 描述设置 dma_divide_16,16 位数据时设置 dma_divide_16,dma 传输时自动将 32 比特 INT32 数据分成两个 16 比特的左右声道数据 函数原型 int i2s_set_dma_divide_16 ( i2s_device_number_t device_num, uint32_t enable ) 参数 成员名称描述输入输出 device_num I2S 号输入 enable 0: 禁用 1: 使能输入 返回值 返回值 描述 0 成功 非 0 失败

203 第 17 章 集成电路内置音频总线 (I2S) i2s_get_dma_divide_ 描述 获取 dma_divide_16 值 用于判断是否需要设置 dma_divide_ 函数原型 int i2s_get_dma_divide_16 ( i2s_device_number_t device_num ) 参数 成员名称描述输入输出 device_num I2S 号输入 返回值 返回值 描述 1 使能 0 禁用 <0 失败 i2s_handle_data_dma 描述 I2S 通过 DMA 传输数据 函数原型 void i2s_handle_data_dma ( i2s_device_number_t device_num, i2s_data_t data, plic_interrupt_t cb ); 参数 参数名称描述输入输出 device_num I2S 号输入 data I2S 数据相关的参数, 详见 i2sdatat 说明输入

204 第 17 章集成电路内置音频总线 (I2S) 198 参数名称描述输入输出 cb dma 中断回调函数, 如果设置为 NULL 则为阻塞模式, 直至传输完毕后退出函数输入 返回值 无 举例 / I2S0 通道 0 设置为接收通道, 接收 16 位数据, 单次传输 32 个时钟,FIFO 深度为 4, 标准模式 接收 8 组数据 / / I2S2 通道 1 设置为发送通道, 发送 16 位数据, 单次传输 32 个时钟,FIFO 深度为 4, 右对齐模式 发送 8 组数据 / uint32_t buf [8]; i2s_init ( I2S_DEVICE_0, I2S_RECEIVER, 0x3 ); i2s_init ( I2S_DEVICE_2, I2S_TRANSMITTER, 0xC ); i2s_rx_channel_config ( I2S_DEVICE_0, I2S_CHANNEL_0, RESOLUTION_16_BIT, SCLK_CYCLES_32, TRIGGER_LEVEL_4, STANDARD_MODE ); i2s_tx_channel_config ( I2S_DEVICE_2, I2S_CHANNEL_1, RESOLUTION_16_BIT, SCLK_CYCLES_32, TRIGGER_LEVEL_4, RIGHT_JUSTIFYING_MODE ); i2s_recv_data_dma ( I2S_DEVICE_0, rx_buf, 8, DMAC_CHANNEL1 ); i2s_send_data_dma ( I2S_DEVICE_2, buf, 8, DMAC_CHANNEL0 ); 17.4 数据类型 相关数据类型 数据结构定义如下 : i2s_device_number_t:i2s 编号 i2s_channel_num_t:i2s 通道号 i2s_transmit_t:i2s 传输模式 i2s_work_mode_t:i2s 工作模式 i2s_word_select_cycles_t:i2s 单次传输时钟数 i2s_word_length_t:i2s 传输数据位数 i2s_fifo_threshold_t:i2s FIFO 深度 i2s_data_t: 通过 DMA 传输时数据相关的参数 i2s_transfer_mode_t:i2s 传输方式 i2s_device_number_t 描述 I2S 编号

205 第 17 章集成电路内置音频总线 (I2S) 定义 typedef enum _i2s_device_number { I2S_DEVICE_0 = 0, I2S_DEVICE_1 = 1, I2S_DEVICE_2 = 2, I2S_DEVICE_MAX } i2s_device_number_t ; 成员 成员名称 描述 I2S_DEVICE_0 I2S 0 I2S_DEVICE_1 I2S 1 I2S_DEVICE_2 I2S i2s_channel_num_t 描述 I2S 通道号 定义 typedef enum _i2s_channel_num { I2S_CHANNEL_0 = 0, I2S_CHANNEL_1 = 1, I2S_CHANNEL_2 = 2, I2S_CHANNEL_3 = 3 } i2s_channel_num_t ; 成员 成员名称 描述 I2S_CHANNEL_0 I2S 通道 0 I2S_CHANNEL_1 I2S 通道 1 I2S_CHANNEL_2 I2S 通道 2

206 第 17 章集成电路内置音频总线 (I2S) 200 成员名称 描述 I2S_CHANNEL_3 I2S 通道 i2s_transmit_t 描述 I2S 传输模式 定义 typedef enum _i2s_transmit { I2S_TRANSMITTER = 0, I2S_RECEIVER = 1 } i2s_transmit_t ; 成员 成员名称 I2S_TRANSMITTER I2S_RECEIVER 描述 发送模式 接收模式 i2s_work_mode_t 描述 I2S 工作模式 定义 typedef enum _i2s_work_mode { STANDARD_MODE = 1, RIGHT_JUSTIFYING_MODE = 2, LEFT_JUSTIFYING_MODE = 4 } i2s_work_mode_t ; 成员

207 第 17 章集成电路内置音频总线 (I2S) 201 成员名称 STANDARD_MODE RIGHT_JUSTIFYING_MODE LEFT_JUSTIFYING_MODE 描述标准模式右对齐模式左对齐模式 i2s_word_select_cycles_t 描述 I2S 单次传输时钟数 定义 typedef enum _word_select_cycles { SCLK_CYCLES_16 = 0x0, SCLK_CYCLES_24 = 0x1, SCLK_CYCLES_32 = 0x2 } i2s_word_select_cycles_t ; 成员 成员名称 SCLK_CYCLES_16 SCLK_CYCLES_24 SCLK_CYCLES_32 描述 16 个时钟 24 个时钟 32 个时钟 i2s_word_length_t 描述 I2S 传输数据位数 定义 typedef enum _word_length { IGNORE_WORD_LENGTH = 0x0, RESOLUTION_12_BIT = 0x1, RESOLUTION_16_BIT = 0x2, RESOLUTION_20_BIT = 0x3,

208 第 17 章集成电路内置音频总线 (I2S) 202 RESOLUTION_24_BIT = 0x4, RESOLUTION_32_BIT = 0x5 } i2s_word_length_t ; 成员 成员名称 IGNORE_WORD_LENGTH RESOLUTION_12_BIT RESOLUTION_16_BIT RESOLUTION_20_BIT RESOLUTION_24_BIT RESOLUTION_32_BIT 描述忽略长度 12 位数据长度 16 位数据长度 20 位数据长度 24 位数据长度 32 位数据长度 i2s_fifo_threshold_t 描述 I2S FIFO 深度 定义 typedef enum _fifo_threshold { / Interrupt trigger when FIFO level is 1 / TRIGGER_LEVEL_1 = 0x0, / Interrupt trigger when FIFO level is 2 / TRIGGER_LEVEL_2 = 0x1, / Interrupt trigger when FIFO level is 3 / TRIGGER_LEVEL_3 = 0x2, / Interrupt trigger when FIFO level is 4 / TRIGGER_LEVEL_4 = 0x3, / Interrupt trigger when FIFO level is 5 / TRIGGER_LEVEL_5 = 0x4, / Interrupt trigger when FIFO level is 6 / TRIGGER_LEVEL_6 = 0x5, / Interrupt trigger when FIFO level is 7 / TRIGGER_LEVEL_7 = 0x6, / Interrupt trigger when FIFO level is 8 / TRIGGER_LEVEL_8 = 0x7, / Interrupt trigger when FIFO level is 9 / TRIGGER_LEVEL_9 = 0x8, / Interrupt trigger when FIFO level is 10 / TRIGGER_LEVEL_10 = 0x9, / Interrupt trigger when FIFO level is 11 /

209 第 17 章集成电路内置音频总线 (I2S) 203 TRIGGER_LEVEL_11 = 0xa, / Interrupt trigger when FIFO level is 12 / TRIGGER_LEVEL_12 = 0xb, / Interrupt trigger when FIFO level is 13 / TRIGGER_LEVEL_13 = 0xc, / Interrupt trigger when FIFO level is 14 / TRIGGER_LEVEL_14 = 0xd, / Interrupt trigger when FIFO level is 15 / TRIGGER_LEVEL_15 = 0xe, / Interrupt trigger when FIFO level is 16 / TRIGGER_LEVEL_16 = 0xf } i2s_fifo_threshold_t ; 成员 成员名称 TRIGGER_LEVEL_1 TRIGGER_LEVEL_2 TRIGGER_LEVEL_3 TRIGGER_LEVEL_4 TRIGGER_LEVEL_5 TRIGGER_LEVEL_6 TRIGGER_LEVEL_7 TRIGGER_LEVEL_8 TRIGGER_LEVEL_9 TRIGGER_LEVEL_10 TRIGGER_LEVEL_11 TRIGGER_LEVEL_12 TRIGGER_LEVEL_13 TRIGGER_LEVEL_14 TRIGGER_LEVEL_15 TRIGGER_LEVEL_16 描述 1 字节 FIFO 深度 2 字节 FIFO 深度 3 字节 FIFO 深度 4 字节 FIFO 深度 5 字节 FIFO 深度 6 字节 FIFO 深度 7 字节 FIFO 深度 8 字节 FIFO 深度 9 字节 FIFO 深度 10 字节 FIFO 深度 11 字节 FIFO 深度 12 字节 FIFO 深度 13 字节 FIFO 深度 14 字节 FIFO 深度 15 字节 FIFO 深度 16 字节 FIFO 深度 i2s_data_t 描述 通过 DMA 传输时数据相关的参数 定义

210 第 17 章集成电路内置音频总线 (I2S) 204 typedef struct _i2s_data_t { dmac_channel_number_t tx_channel ; dmac_channel_number_t rx_channel ; uint32_t tx_buf ; size_t tx_len ; uint32_t rx_buf ; size_t rx_len ; i2s_transfer_mode_t transfer_mode ; bool nowait_dma_idle ; bool wait_dma_done ; } i2s_data_t ; 成员 成员名称 tx_channel rx_channel tx_buf tx_len rx_buf rx_len transfer_mode nowait_dma_idle wait_dma_done 描述发送时使用的 DMA 通道号发送时使用的 DMA 通道号发送的数据发送数据的长度接收的数据接收数据长度传输模式, 发送或接收 DMA 传输前是否等待 DMA 通道空闲 DMA 传输后是否等待传输完成, 如果 cb 不为空则这个函数无效 i2s_transfer_mode_t 描述 I2S 传输方式 定义 typedef enum _i2s_transfer_mode { I2S_SEND, I2S_RECEIVE, } i2s_transfer_mode_t ; 成员

211 第 17 章集成电路内置音频总线 (I2S) 205 成员名称 I2S_SEND I2S_RECEIVE 描述 发送 软件

212 206 第 18 章 定时器 (TIMER) 18.1 概述 芯片有 3 个定时器, 每个定时器有 4 路通道 可以配置为 PWM, 详见 PWM 说明 18.2 功能描述 TIMER 模块具有以下功能 : 启用或禁用定时器 配置定时器触发间隔 配置定时器触发处理程序 18.3 API 参考 对应的头文件 timer.h 为用户提供以下接口 timer_init timer_set_interval timer_set_irq (0.6.0 后不再支持, 请使用 timer_irq_register) timer_set_enable timer_irq_register timer_irq_deregister

213 第 18 章定时器 (TIMER) timer_init 描述 初始化定时器 函数原型 void timer_init ( timer_device_number_t timer_number ) 参数 参数名称描述输入输出 timer_number 定时器号输入 返回值 timer_set_interval 描述 设置定时间隔 函数原型 size_t timer_set_interval ( timer_device_number_t timer_number, timer_channel_number_t channel, size_t nanoseconds ) 参数 参数名称 描述 输入输出 timer_number 定时器号 输入 channel 定时器通道号 输入 nanoseconds 时间间隔 ( 纳秒 ) 输入

214 第 18 章定时器 (TIMER) 返回值 实际的触发间隔 ( 纳秒 ) timer_set_irq 描述 设置定时器触发中断回调函数, 该函数已废弃, 替代函数为 timer_irq_register 函数原型 void timer_set_irq ( timer_device_number_t timer_number, timer_channel_number_t channel, void ( func )(), uint32_t priority ) 参数 参数名称 描述 输入输出 timer_number 定时器号 输入 channel 定时器通道号 输入 func 回调函数 输入 priority 中断优先级 输入 返回值 timer_set_enable 描述 使能禁用定时器 函数原型 void timer_set_enable ( timer_device_number_t timer_number, timer_channel_number_t channel, uint32_t enable ) 参数

215 第 18 章定时器 (TIMER) 209 参数名称 描述 输入输出 timer_number 定时器号 输入 channel 定时器通道号 输入 enable 使能禁用定时器 0: 禁用 1: 使能 输入 返回值 timer_irq_register 描述 注册定时器触发中断回调函数 函数原型 int timer_irq_register ( timer_device_number_t device, timer_channel_number_t channel, int is_single_shot, uint32_t priority, timer_callback_t callback, void ctx ); 参数 参数名称 描述 输入输出 device 定时器号 输入 channel 定时器通道号 输入 is_single_shot 是否单次中断 输入 priority 中断优先级 输入 callback 中断回调函数 输入 ctx 回调函数参数 输入 返回值 返回值 描述 0 成功 非 0 失败

216 第 18 章 定时器 (TIMER) timer_irq_deregister 描述 注销定时器中断函数 函数原型 int timer_irq_deregister ( timer_device_number_t device, timer_channel_number_t channel ) 参数 参数名称描述输入输出 device 定时器号输入 channel 定时器通道号输入 返回值 返回值 描述 0 成功 非 0 失败 举例 / 定时器 0 通道 0 定时 1 秒打印 Time OK! / void irq_time ( void ) { printf (" Time OK!\n"); } plic_init (); timer_init ( TIMER_DEVICE_0 ); timer_set_interval ( TIMER_DEVICE_0, TIMER_CHANNEL_0, 1e9 ); timer_set_irq ( TIMER_DEVICE_0, TIMER_CHANNEL_0, irq_time, 1); timer_set_enable ( TIMER_DEVICE_0, TIMER_CHANNEL_0, 1); sysctl_enable_irq (); 18.4 数据类型 相关数据类型 数据结构定义如下 :

217 第 18 章定时器 (TIMER) 211 timer_device_number_t: 定时器编号 timer_channel_number_t: 定时器通道号 timer_callback_t: 定时器回调函数 timer_device_number_t 描述 定时器编号 定义 typedef enum _timer_deivce_number { TIMER_DEVICE_0, TIMER_DEVICE_1, TIMER_DEVICE_2, TIMER_DEVICE_MAX, } timer_device_number_t ; 成员 成员名称 描述 TIMER_DEVICE_0 定时器 0 TIMER_DEVICE_1 定时器 1 TIMER_DEVICE_2 定时器 timer_channel_number_t 描述 定时器通道号 定义 typedef enum _timer_channel_number { TIMER_CHANNEL_0, TIMER_CHANNEL_1, TIMER_CHANNEL_2, TIMER_CHANNEL_3, TIMER_CHANNEL_MAX,

218 第 18 章定时器 (TIMER) 212 } timer_channel_number_t ; 成员 成员名称 描述 TIMER_CHANNEL_0 定时器通道 0 TIMER_CHANNEL_1 定时器通道 1 TIMER_CHANNEL_2 定时器通道 2 TIMER_CHANNEL_3 定时器通道 timer_callback_t 描述 定时器回调函数 定义 typedef int ( timer_callback_t )( void ctx );

219 213 第 19 章 实时时钟 (RTC) 19.1 概述 RTC 是用来计时的单元, 在设置时间后具备计时功能 注意 RTC 模块仅当 PLL0 使能, 并且 CPU 频率大于 30MHz 时使用 19.2 功能描述 RTC 模块具有以下功能 : 获取当前日期时刻 设置当前日期时刻 19.3 API 参考 对应的头文件 rtc.h 为用户提供以下接口 rtc_init rtc_timer_set rtc_timer_get rtc_alarm_set rtc_alarm_get rtc_tick_irq_register rtc_tick_irq_unregister rtc_alarm_irq_register

220 第 19 章实时时钟 (RTC) 214 rtc_alarm_irq_unregister rtc_init 描述 初始化 RTC 函数原型 int rtc_init ( void ) 参数 返回值 返回值 描述 0 成功 非 0 失败 rtc_timer_set 描述 设置日期时间 函数原型 int rtc_timer_set ( int year, int month, int day, int hour, int minute, int second ) 参数 参数名称 描述 输入输出 year 年 输入 month 月 输入 day 日 输入 hour 时 输入

221 第 19 章实时时钟 (RTC) 215 参数名称描述输入输出 minute 分输入 second 秒输入 返回值 无 rtc_timer_get 描述 获取日期时间 函数原型 int rtc_timer_get ( int year, int month, int day, int hour, int minute, int second ) 参数 参数名称 描述 输入输出 year 年 输出 month 月 输出 day 日 输出 hour 时 输出 minute 分 输出 second 秒 输出 返回值 返回值 描述 0 成功 非 0 失败 rtc_alarm_set 描述 设置日期时间

222 第 19 章实时时钟 (RTC) 函数原型 int rtc_alarmr_set ( int year, int month, int day, int hour, int minute, int second ) 参数 参数名称 描述 输入输出 year 年 输入 month 月 输入 day 日 输入 hour 时 输入 minute 分 输入 second 秒 输入 返回值 无 rtc_alarm_get 描述 获取日期时间 函数原型 int rtc_alarm_get ( int year, int month, int day, int hour, int minute, int second ) 参数 参数名称 描述 输入输出 year 年 输出 month 月 输出 day 日 输出 hour 时 输出 minute 分 输出

223 第 19 章实时时钟 (RTC) 217 参数名称描述输入输出 second 秒输出 返回值 返回值 描述 0 成功 非 0 失败 rtc_tick_irq_register 描述 设置 RTC tick 中断, 可以设置整秒 整分 整时 整天中断 函数原型 int rtc_tick_irq_register ( bool is_single_shot, rtc_tick_interrupt_mode_t mode, plic_irq_callback_t callback, void ctx, uint8_t priority ) 参数 参数名称 描述 输入输出 issingleshot 是否单次触发 输入 mode 中断触发模式 输入 callback 回调函数 输入 ctx 回调函数参数 输入 priority 优先级 输入 返回值 返回值 描述 0 成功 非 0 失败

224 第 19 章 实时时钟 (RTC) rtc_tick_irq_unregister 描述 注销 tick 中断 函数原型 void rtc_tick_irq_unregister ( void ); 参数 返回值 rtc_alarm_irq_register 描述 注册 alarm 中断 函数原型 int rtc_alarm_irq_register ( bool is_single_shot, rtc_mask_t mask, plic_irq_callback_t callback, void ctx, uint8_t priority ) 参数 参数名称 描述 输入输出 issingleshot 是否单次触发 输入 mask alarm 中断掩码, 用于灵活配置中断触发方式 输入 callback 回调函数 输入 ctx 回调函数参数 输入 priority 优先级 输入 返回值

225 第 19 章实时时钟 (RTC) 219 返回值 描述 0 成功 非 0 失败 rtc_alarm_irq_unregister 描述 注销 alarm 中断 函数原型 void rtc_alarm_irq_unregister ( void ) 参数 返回值 举例 int { } int { } tick_irq ( void ctx) printk ("%s\n", func ); return 0; alarm_irq ( void ctx) printk ("%s\n", func ); return 0; rtc_init (); rtc_timer_set (2019, 5, 7, 15, 4, 55); rtc_tick_irq_register ( true, RTC_INT_MINUTE, tick_irq, NULL, 1); rtc_alarm_set (2019, 5, 7, 15, 5, 5); rtc_mask_t mask = ( rtc_mask_t )

226 第 19 章实时时钟 (RTC) 220 {. second = 0,. minute = 1,. hour = 1,.day = 1,. month = 1,. year = 1, }; rtc_alarm_irq_register ( true, mask, alarm_irq, NULL, 1); int year ; int month ; int day ; int hour ; int minute ; int second ; rtc_timer_get (& year, &month, &day, &hour, & minute, & second ); printf ("%4d -%d -%d %d:%d:%d\n", year, month, day, hour, minute, second );

227 221 第 20 章 脉冲宽度调制器 (PWM) 20.1 概述 PWM 用于控制脉冲输出的占空比 其本质是一个定时器, 所以注意设置 PWM 号与通道时不要与 TIMER 定时器冲突 20.2 功能描述 PWM 模块具有以下功能 : 配置 PWM 输出频率 配置 PWM 每个管脚的输出占空比 20.3 API 参考 对应头文件 pwm.h 为用户提供以下接口 pwm_init pwm_set_frequency pwm_set_enable pwm_init 描述 初始化 PWM

228 第 20 章脉冲宽度调制器 (PWM) 函数原型 void pwm_init ( pwm_device_number_t pwm_number ) 参数 参数名称描述输入输出 pwm_number pwm 号输入 返回值 pwm_set_frequency 描述 设置频率及占空比 函数原型 double pwm_set_frequency ( pwm_device_number_t pwm_number, pwm_channel_number_t channel, double frequency, double duty ) 参数 参数名称 描述 输入输出 pwm_number PWM 号 输入 channel PWM 通道号 输入 frequency PWM 输出频率 输入 duty 占空比 输入 返回值 实际输出频率

229 第 20 章脉冲宽度调制器 (PWM) pwmsetenable 描述 使能禁用 PWM 函数原型 void pwm_set_enable ( pwm_device_number_t pwm_number, uint32_t channel, int enable ) 参数 参数名称 描述 输入输出 pwm_number PWM 号 输入 channel PWM 通道号 输入 enable 使能禁用 PWM0: 禁用 1: 使能 输入 返回值 举例 / pwm0 channel 1 输出 200 KHZ 占空比为 0.5 的方波 / / 设置 IO13 作为 PWM 的输出管脚 / fpioa_set_function (13, FUNC_TIMER0_TOGGLE1 ); pwm_init ( PWM_DEVICE_0 ); pwm_set_frequency ( PWM_DEVICE_0, PWM_CHANNEL_1, , 0.5); pwm_set_enable ( PWM_DEVICE_0, PWM_CHANNEL_1, 1); 20.4 数据类型 pwm_device_number_t:pwm 号 pwm_channel_number_t:pwm 通道号

230 第 20 章脉冲宽度调制器 (PWM) pwm_device_number_t 描述 pwm 号 定义 typedef enum _pwm_device_number { PWM_DEVICE_0, PWM_DEVICE_1, PWM_DEVICE_2, PWM_DEVICE_MAX, } pwm_device_number_t ; 成员 成员名称 PWM_DEVICE_0 PWM_DEVICE_1 PWM_DEVICE_2 描述 PWM0 PWM1 PWM pwm_channel_number_t 描述 pwm 通道号 定义 typedef enum _pwm_channel_number { PWM_CHANNEL_0, PWM_CHANNEL_1, PWM_CHANNEL_2, PWM_CHANNEL_3, PWM_CHANNEL_MAX, } pwm_channel_number_t ; 成员

231 第 20 章脉冲宽度调制器 (PWM) 225 成员名称 描述 PWM_CHANNEL_0 PWM 通道 0 PWM_CHANNEL_1 PWM 通道 1 PWM_CHANNEL_2 PWM 通道 2 PWM_CHANNEL_3 PWM 通道 3

232 226 第 21 章 系统控制 21.1 概述 系统控制模块提供对操作系统的配置功能 21.2 功能描述 系统控制模块具有以下功能 : 设置 PLL CPU 时钟频率 设置各个模块时钟的分频值 获取各个模块的时钟频率 使能 禁用 复位各个模块 设置 DMA 请求源 使能禁用系统中断 21.3 API 参考 对应的头文件 sysctl.h 为用户提供以下接口 sysctl_cpu_set_freq sysctl_pll_set_freq sysctl_pll_get_freq sysctl_pll_enable sysctl_pll_disable

233 第 21 章系统控制 227 sysctl_clock_set_threshold sysctl_clock_get_threshold sysctl_clock_set_clock_select sysctl_clock_get_clock_select sysctl_clock_get_freq sysctl_clock_enable sysctl_clock_disable sysctl_reset sysctl_dma_select sysctl_set_power_mode sysctl_enable_irq sysctl_disable_irq sysctl_get_time_us sysctl_get_reset_status sysctl_cpu_set_freq 描述 设置 CPU 工作频率 是通过修改 PLL0 的频率实现的 函数原型 uint32_t sysctl_cpu_set_freq ( uint32_t freq ) 参数 参数名称描述输入输出 freq 要设置的频率 (Hz) 输入 返回值 设置后的实际频率 (Hz) sysctl_set_pll_frequency 描述 设置 PLL 频率

234 第 21 章系统控制 函数原型 uint32_t sysctl_pll_set_freq ( sysctl_pll_t pll, uint32_t pll_freq ) 参数 参数名称描述输入输出 pll PLL 编号输入 pll_freq 要设置的频率 (Hz) 输入 返回值 设置后的实际频率 (Hz) 函数原型 uint32_t sysctl_pll_get_freq ( sysctl_pll_t pll ) 参数 参数名称描述输入输出 pll PLL 编号输入 返回值 对应 PLL 的频率 (Hz) sysctl_pll_enable 描述 使能对应的 PLL 函数原型 int sysctl_pll_enable ( sysctl_pll_t pll )

235 第 21 章系统控制 参数 参数名称描述输入输出 pll PLL 编号输入 返回值 返回值 描述 0 成功 非 0 失败 sysctl_pll_disable 描述 禁用对应 PLL 函数原型 int sysctl_pll_disable ( sysctl_pll_t pll ) 参数 参数名称描述输入输出 pll PLL 编号输入 返回值 返回值 描述 0 成功 非 0 失败 sysctl_clock_set_threshold 描述 设置对应时钟的分频值

236 第 21 章系统控制 函数原型 void sysctl_clock_set_threshold ( sysctl_threshold_t which, int threshold ) 参数 参数名称描述输入输出 which 设置的时钟输入 threshold 分频值输入 返回值 返回值 描述 0 成功 非 0 失败 sysctl_clock_get_threshold 描述 获取对应时钟的分频值 函数原型 int sysctl_clock_get_threshold ( sysctl_threshold_t which ) 参数名称描述输入输出 which 时钟输入 返回值 对应时钟的分频值

237 第 21 章系统控制 sysctl_clock_set_clock_select 描述 设置时钟源 函数原型 int sysctl_clock_set_clock_select ( sysctl_clock_select_t which, int select ) 参数 参数名称描述输入输出 which 时钟输入 select 时钟源输入 返回值 返回值 描述 0 成功 非 0 失败 sysctl_clock_get_clock_select 描述 获取时钟对应的时钟源 函数原型 int sysctl_clock_get_clock_select ( sysctl_clock_select_t which ) 参数 参数名称描述输入输出 which 时钟输入

238 第 21 章系统控制 返回值 时钟对应的时钟源 sysctl_clock_get_freq 描述 获取时钟的频率 函数原型 uint32_t sysctl_clock_get_freq ( sysctl_clock_t clock ) 参数 参数名称描述输入输出 clock 时钟输入 返回值 时钟的频率 (Hz) sysctl_clock_enable 描述 使能时钟 PLL 要使用 sysctl_pll_enable 函数原型 int sysctl_clock_enable ( sysctl_clock_t clock ) 参数 参数名称描述输入输出 clock 时钟输入 返回值

239 第 21 章系统控制 233 返回值 描述 0 成功 非 0 失败 sysctl_clock_disable 描述 禁用时钟,PLL 使用 sysctl_pll_disable 函数原型 int sysctl_clock_disable ( sysctl_clock_t clock ) 参数 参数名称描述输入输出 clock 时钟输入 返回值 返回值 描述 0 成功 非 0 失败 sysctl_reset 描述 复位各个模块 函数原型 void sysctl_reset ( sysctl_reset_t reset ) 参数

240 第 21 章系统控制 234 参数名称描述输入输出 reset 预复位模块输入 返回值 sysctl_dma_select 描述 设置 DMA 请求源 与 DMAC 的 API 配合使用 函数原型 int sysctl_dma_select ( sysctl_dma_channel_t channel, sysctl_dma_select_t select ) 参数 参数名称描述输入输出 channel DMA 通道号输入 select DMA 请求源输入 返回值 返回值 描述 0 成功 非 0 失败 sysctl_set_power_mode 描述 设置 FPIOA 的对应电源域的电压 原型 void sysctl_set_power_mode ( sysctl_power_bank_t power_bank, sysctl_io_power_mode_t io_power_mode )

241 第 21 章系统控制 参数 参数名称描述输入输出 power_bank IO 电源域编号输入 io_power_mode 设置的电压值 1.8V 或 3.3V 输入 返回值 sysctl_enable_irq 描述 使能系统中断, 如果使用中断一定要开启系统中断 函数原型 void sysctl_enable_irq ( void ) 参数 返回值 sysctl_disable_irq 描述 禁用系统中断 函数原型 void sysctl_disable_irq ( void ) 参数

242 第 21 章系统控制 返回值 sysctl_get_time_us 描述 开机至今的时间 ( 微秒 ) 函数原型 uint64_t sysctl_get_time_us ( void ) 参数 返回值 开机至今的时间 ( 微秒 ) sysctl_get_reset_status 描述 获取复位状态 参见 sysctlresetenumstatust 说明 函数原型 sysctl_reset_enum_status_t sysctl_get_reset_status ( void ) 参数 返回值 复位状态 21.4 数据类型 相关数据类型 数据结构定义如下 :

243 第 21 章系统控制 237 sysctl_pll_t:pll 编号 sysctl_threshold_t: 设置分频值时各模块编号 sysctl_clock_select_t: 设置时钟源时各模块编号 sysctl_clock_t: 各个模块的编号 sysctl_reset_t: 复位时各个模块的编号 sysctl_dma_channel_t:dma 通道号 sysctl_dma_select_t:dma 请求源编号 sysctl_power_bank_t: 电源域编号 sysctl_io_power_mode_t:io 输出电压值 sysctl_reset_enum_status_t: 复位状态 sysctl_pll_t 描述 PLL 编号 定义 typedef enum _sysctl_pll_t { SYSCTL_PLL0, SYSCTL_PLL1, SYSCTL_PLL2, SYSCTL_PLL_MAX } sysctl_pll_t ; 成员 成员名称 SYSCTL_PLL0 SYSCTL_PLL1 SYSCTL_PLL2 描述 PLL0 PLL1 PLL sysctl_threshold_t 描述 设置分频值各模块编号

244 第 21 章系统控制 定义 typedef enum _sysctl_threshold_t { SYSCTL_THRESHOLD_ACLK, SYSCTL_THRESHOLD_APB0, SYSCTL_THRESHOLD_APB1, SYSCTL_THRESHOLD_APB2, SYSCTL_THRESHOLD_SRAM0, SYSCTL_THRESHOLD_SRAM1, SYSCTL_THRESHOLD_AI, SYSCTL_THRESHOLD_DVP, SYSCTL_THRESHOLD_ROM, SYSCTL_THRESHOLD_SPI0, SYSCTL_THRESHOLD_SPI1, SYSCTL_THRESHOLD_SPI2, SYSCTL_THRESHOLD_SPI3, SYSCTL_THRESHOLD_TIMER0, SYSCTL_THRESHOLD_TIMER1, SYSCTL_THRESHOLD_TIMER2, SYSCTL_THRESHOLD_I2S0, SYSCTL_THRESHOLD_I2S1, SYSCTL_THRESHOLD_I2S2, SYSCTL_THRESHOLD_I2S0_M, SYSCTL_THRESHOLD_I2S1_M, SYSCTL_THRESHOLD_I2S2_M, SYSCTL_THRESHOLD_I2C0, SYSCTL_THRESHOLD_I2C1, SYSCTL_THRESHOLD_I2C2, SYSCTL_THRESHOLD_WDT0, SYSCTL_THRESHOLD_WDT1, SYSCTL_THRESHOLD_MAX = 28 } sysctl_threshold_t ; 成员 成员名称 SYSCTL_THRESHOLD_ACLK SYSCTL_THRESHOLD_APB0 SYSCTL_THRESHOLD_APB1 SYSCTL_THRESHOLD_APB2 SYSCTL_THRESHOLD_SRAM0 SYSCTL_THRESHOLD_SRAM1 SYSCTL_THRESHOLD_AI SYSCTL_THRESHOLD_DVP 描述 ACLK APB0 APB1 ACLK SRAM0 SRAM1 AI DVP

245 第 21 章系统控制 239 成员名称 SYSCTL_THRESHOLD_ROM SYSCTL_THRESHOLD_SPI0 SYSCTL_THRESHOLD_SPI1 SYSCTL_THRESHOLD_SPI2 SYSCTL_THRESHOLD_SPI3 SYSCTL_THRESHOLD_TIMER0 SYSCTL_THRESHOLD_TIMER1 SYSCTL_THRESHOLD_TIMER2 SYSCTL_THRESHOLD_I2S0 SYSCTL_THRESHOLD_I2S1 SYSCTL_THRESHOLD_I2S2 SYSCTL_THRESHOLD_I2S0_M SYSCTL_THRESHOLD_I2S1_M SYSCTL_THRESHOLD_I2S2_M SYSCTL_THRESHOLD_I2C0 SYSCTL_THRESHOLD_I2C1 SYSCTL_THRESHOLD_I2C2 SYSCTL_THRESHOLD_WDT0 SYSCTL_THRESHOLD_WDT1 描述 ROM SPI0 SPI1 SPI2 SPI3 TIMER0 TIMER1 TIMER2 I2S0 I2S1 I2S2 I2S0 MCLK I2S1 MCLK I2S2 MCLK I2C0 I2C1 I2C2 WDT0 WDT sysctl_clock_select_t 描述 设置时钟源时各模块编号 定义 typedef enum _sysctl_clock_select_t { SYSCTL_CLOCK_SELECT_PLL0_BYPASS, SYSCTL_CLOCK_SELECT_PLL1_BYPASS, SYSCTL_CLOCK_SELECT_PLL2_BYPASS, SYSCTL_CLOCK_SELECT_PLL2, SYSCTL_CLOCK_SELECT_ACLK, SYSCTL_CLOCK_SELECT_SPI3, SYSCTL_CLOCK_SELECT_TIMER0, SYSCTL_CLOCK_SELECT_TIMER1, SYSCTL_CLOCK_SELECT_TIMER2, SYSCTL_CLOCK_SELECT_SPI3_SAMPLE,

246 第 21 章系统控制 240 SYSCTL_CLOCK_SELECT_MAX = 11 } sysctl_clock_select_t ; 成员 成员名称 SYSCTL_CLOCK_SELECT_PLL0_BYPASS SYSCTL_CLOCK_SELECT_PLL1_BYPASS SYSCTL_CLOCK_SELECT_PLL2_BYPASS SYSCTL_CLOCK_SELECT_PLL2 SYSCTL_CLOCK_SELECT_ACLK SYSCTL_CLOCK_SELECT_SPI3 SYSCTL_CLOCK_SELECT_TIMER0 SYSCTL_CLOCK_SELECT_TIMER1 SYSCTL_CLOCK_SELECT_TIMER2 SYSCTL_CLOCK_SELECT_SPI3_SAMPLE 描述 PLL0_BYPASS PLL1_BYPASS PLL2_BYPASS PLL2 ACLK SPI3 TIMER0 TIMER1 TIMER2 SPI3 数据采样时钟沿选择 sysctl_clock_t 描述 各个模块的编号 定义 typedef enum _sysctl_clock_t { SYSCTL_CLOCK_PLL0, SYSCTL_CLOCK_PLL1, SYSCTL_CLOCK_PLL2, SYSCTL_CLOCK_CPU, SYSCTL_CLOCK_SRAM0, SYSCTL_CLOCK_SRAM1, SYSCTL_CLOCK_APB0, SYSCTL_CLOCK_APB1, SYSCTL_CLOCK_APB2, SYSCTL_CLOCK_ROM, SYSCTL_CLOCK_DMA, SYSCTL_CLOCK_AI, SYSCTL_CLOCK_DVP, SYSCTL_CLOCK_FFT, SYSCTL_CLOCK_GPIO, SYSCTL_CLOCK_SPI0,

247 第 21 章系统控制 241 SYSCTL_CLOCK_SPI1, SYSCTL_CLOCK_SPI2, SYSCTL_CLOCK_SPI3, SYSCTL_CLOCK_I2S0, SYSCTL_CLOCK_I2S1, SYSCTL_CLOCK_I2S2, SYSCTL_CLOCK_I2C0, SYSCTL_CLOCK_I2C1, SYSCTL_CLOCK_I2C2, SYSCTL_CLOCK_UART1, SYSCTL_CLOCK_UART2, SYSCTL_CLOCK_UART3, SYSCTL_CLOCK_AES, SYSCTL_CLOCK_FPIOA, SYSCTL_CLOCK_TIMER0, SYSCTL_CLOCK_TIMER1, SYSCTL_CLOCK_TIMER2, SYSCTL_CLOCK_WDT0, SYSCTL_CLOCK_WDT1, SYSCTL_CLOCK_SHA, SYSCTL_CLOCK_OTP, SYSCTL_CLOCK_RTC, SYSCTL_CLOCK_ACLK = 40, SYSCTL_CLOCK_HCLK, SYSCTL_CLOCK_IN0, SYSCTL_CLOCK_MAX } sysctl_clock_t ; 成员 成员名称 SYSCTL_CLOCK_PLL0 SYSCTL_CLOCK_PLL1 SYSCTL_CLOCK_PLL2 SYSCTL_CLOCK_CPU SYSCTL_CLOCK_SRAM0 SYSCTL_CLOCK_SRAM1 SYSCTL_CLOCK_APB0 SYSCTL_CLOCK_APB1 SYSCTL_CLOCK_APB2 SYSCTL_CLOCK_ROM SYSCTL_CLOCK_DMA SYSCTL_CLOCK_AI SYSCTL_CLOCK_DVP 描述 PLL0 PLL1 PLL2 CPU SRAM0 SRAM1 APB0 APB1 APB2 ROM DMA AI DVP

248 第 21 章系统控制 242 成员名称 SYSCTL_CLOCK_FFT SYSCTL_CLOCK_GPIO SYSCTL_CLOCK_SPI0 SYSCTL_CLOCK_SPI1 SYSCTL_CLOCK_SPI2 SYSCTL_CLOCK_SPI3 SYSCTL_CLOCK_I2S0 SYSCTL_CLOCK_I2S1 SYSCTL_CLOCK_I2S2 SYSCTL_CLOCK_I2C0 SYSCTL_CLOCK_I2C1 SYSCTL_CLOCK_I2C2 SYSCTL_CLOCK_UART1 SYSCTL_CLOCK_UART2 SYSCTL_CLOCK_UART3 SYSCTL_CLOCK_AES SYSCTL_CLOCK_FPIOA SYSCTL_CLOCK_TIMER0 SYSCTL_CLOCK_TIMER1 SYSCTL_CLOCK_TIMER2 SYSCTL_CLOCK_WDT0 SYSCTL_CLOCK_WDT1 SYSCTL_CLOCK_SHA SYSCTL_CLOCK_OTP SYSCTL_CLOCK_RTC SYSCTL_CLOCK_ACLK SYSCTL_CLOCK_HCLK SYSCTL_CLOCK_IN0 描述 FFT GPIO SPI0 SPI1 SPI2 SPI3 I2S0 I2S1 I2S2 I2C0 I2C1 I2C2 UART1 UART2 UART3 AES FPIOA TIMER0 TIMER1 TIMER2 WDT0 WDT1 SHA OTP RTC ACLK HCLK 外部输入时钟 IN sysctl_reset_t 描述 复位时各个模块的编号 定义

249 第 21 章系统控制 243 typedef enum _sysctl_reset_t { SYSCTL_RESET_SOC, SYSCTL_RESET_ROM, SYSCTL_RESET_DMA, SYSCTL_RESET_AI, SYSCTL_RESET_DVP, SYSCTL_RESET_FFT, SYSCTL_RESET_GPIO, SYSCTL_RESET_SPI0, SYSCTL_RESET_SPI1, SYSCTL_RESET_SPI2, SYSCTL_RESET_SPI3, SYSCTL_RESET_I2S0, SYSCTL_RESET_I2S1, SYSCTL_RESET_I2S2, SYSCTL_RESET_I2C0, SYSCTL_RESET_I2C1, SYSCTL_RESET_I2C2, SYSCTL_RESET_UART1, SYSCTL_RESET_UART2, SYSCTL_RESET_UART3, SYSCTL_RESET_AES, SYSCTL_RESET_FPIOA, SYSCTL_RESET_TIMER0, SYSCTL_RESET_TIMER1, SYSCTL_RESET_TIMER2, SYSCTL_RESET_WDT0, SYSCTL_RESET_WDT1, SYSCTL_RESET_SHA, SYSCTL_RESET_RTC, SYSCTL_RESET_MAX = 31 } sysctl_reset_t ; 成员 成员名称 SYSCTL_RESET_SOC SYSCTL_RESET_ROM SYSCTL_RESET_DMA SYSCTL_RESET_AI SYSCTL_RESET_DVP SYSCTL_RESET_FFT SYSCTL_RESET_GPIO SYSCTL_RESET_SPI0 SYSCTL_RESET_SPI1 描述芯片复位 ROM DMA AI DVP FFT GPIO SPI0 SPI1

250 第 21 章系统控制 244 成员名称 SYSCTL_RESET_SPI2 SYSCTL_RESET_SPI3 SYSCTL_RESET_I2S0 SYSCTL_RESET_I2S1 SYSCTL_RESET_I2S2 SYSCTL_RESET_I2C0 SYSCTL_RESET_I2C1 SYSCTL_RESET_I2C2 SYSCTL_RESET_UART1 SYSCTL_RESET_UART2 SYSCTL_RESET_UART3 SYSCTL_RESET_AES SYSCTL_RESET_FPIOA SYSCTL_RESET_TIMER0 SYSCTL_RESET_TIMER1 SYSCTL_RESET_TIMER2 SYSCTL_RESET_WDT0 SYSCTL_RESET_WDT1 SYSCTL_RESET_SHA SYSCTL_RESET_RTC 描述 SPI2 SPI3 I2S0 I2S1 I2S2 I2C0 I2C1 I2C2 UART1 UART2 UART3 AES FPIOA TIMER0 TIMER1 TIMER2 WDT0 WDT1 SHA RTC sysctl_dma_channel_t 描述 DMA 通道号 定义 typedef enum _sysctl_dma_channel_t { SYSCTL_DMA_CHANNEL_0, SYSCTL_DMA_CHANNEL_1, SYSCTL_DMA_CHANNEL_2, SYSCTL_DMA_CHANNEL_3, SYSCTL_DMA_CHANNEL_4, SYSCTL_DMA_CHANNEL_5, SYSCTL_DMA_CHANNEL_MAX } sysctl_dma_channel_t ;

251 第 21 章系统控制 成员 成员名称 描述 SYSCTL_DMA_CHANNEL_0 DMA 通道 0 SYSCTL_DMA_CHANNEL_1 DMA 通道 1 SYSCTL_DMA_CHANNEL_2 DMA 通道 2 SYSCTL_DMA_CHANNEL_3 DMA 通道 3 SYSCTL_DMA_CHANNEL_4 DMA 通道 4 SYSCTL_DMA_CHANNEL_5 DMA 通道 sysctl_dma_select_t 描述 DMA 请求源编号 定义 typedef enum _sysctl_dma_select_t { SYSCTL_DMA_SELECT_SSI0_RX_REQ, SYSCTL_DMA_SELECT_SSI0_TX_REQ, SYSCTL_DMA_SELECT_SSI1_RX_REQ, SYSCTL_DMA_SELECT_SSI1_TX_REQ, SYSCTL_DMA_SELECT_SSI2_RX_REQ, SYSCTL_DMA_SELECT_SSI2_TX_REQ, SYSCTL_DMA_SELECT_SSI3_RX_REQ, SYSCTL_DMA_SELECT_SSI3_TX_REQ, SYSCTL_DMA_SELECT_I2C0_RX_REQ, SYSCTL_DMA_SELECT_I2C0_TX_REQ, SYSCTL_DMA_SELECT_I2C1_RX_REQ, SYSCTL_DMA_SELECT_I2C1_TX_REQ, SYSCTL_DMA_SELECT_I2C2_RX_REQ, SYSCTL_DMA_SELECT_I2C2_TX_REQ, SYSCTL_DMA_SELECT_UART1_RX_REQ, SYSCTL_DMA_SELECT_UART1_TX_REQ, SYSCTL_DMA_SELECT_UART2_RX_REQ, SYSCTL_DMA_SELECT_UART2_TX_REQ, SYSCTL_DMA_SELECT_UART3_RX_REQ, SYSCTL_DMA_SELECT_UART3_TX_REQ, SYSCTL_DMA_SELECT_AES_REQ, SYSCTL_DMA_SELECT_SHA_RX_REQ, SYSCTL_DMA_SELECT_AI_RX_REQ, SYSCTL_DMA_SELECT_FFT_RX_REQ, SYSCTL_DMA_SELECT_FFT_TX_REQ,

252 第 21 章系统控制 246 SYSCTL_DMA_SELECT_I2S0_TX_REQ, SYSCTL_DMA_SELECT_I2S0_RX_REQ, SYSCTL_DMA_SELECT_I2S1_TX_REQ, SYSCTL_DMA_SELECT_I2S1_RX_REQ, SYSCTL_DMA_SELECT_I2S2_TX_REQ, SYSCTL_DMA_SELECT_I2S2_RX_REQ, SYSCTL_DMA_SELECT_MAX } sysctl_dma_select_t ; 成员 成员名称 SYSCTL_DMA_SELECT_SSI0_RX_REQ SYSCTL_DMA_SELECT_SSI0_TX_REQ SYSCTL_DMA_SELECT_SSI1_RX_REQ SYSCTL_DMA_SELECT_SSI1_TX_REQ SYSCTL_DMA_SELECT_SSI2_RX_REQ SYSCTL_DMA_SELECT_SSI2_TX_REQ SYSCTL_DMA_SELECT_SSI3_RX_REQ SYSCTL_DMA_SELECT_SSI3_TX_REQ SYSCTL_DMA_SELECT_I2C0_RX_REQ SYSCTL_DMA_SELECT_I2C0_TX_REQ SYSCTL_DMA_SELECT_I2C1_RX_REQ SYSCTL_DMA_SELECT_I2C1_TX_REQ SYSCTL_DMA_SELECT_I2C2_RX_REQ SYSCTL_DMA_SELECT_I2C2_TX_REQ SYSCTL_DMA_SELECT_UART1_RX_REQ SYSCTL_DMA_SELECT_UART1_TX_REQ SYSCTL_DMA_SELECT_UART2_RX_REQ SYSCTL_DMA_SELECT_UART2_TX_REQ SYSCTL_DMA_SELECT_UART3_RX_REQ SYSCTL_DMA_SELECT_UART3_TX_REQ SYSCTL_DMA_SELECT_AES_REQ SYSCTL_DMA_SELECT_SHA_RX_REQ SYSCTL_DMA_SELECT_AI_RX_REQ SYSCTL_DMA_SELECT_FFT_RX_REQ SYSCTL_DMA_SELECT_FFT_TX_REQ SYSCTL_DMA_SELECT_I2S0_TX_REQ SYSCTL_DMA_SELECT_I2S0_RX_REQ 描述 SPI0 接收 SPI0 发送 SPI1 接收 SPI1 发送 SPI2 接收 SPI2 发送 SPI3 接收 SPI3 发送 I2C0 接收 I2C0 发送 I2C1 接收 I2C1 发送 I2C2 接收 I2C2 发送 UART1 接收 UART1 发送 UART2 接收 UART2 发送 UART3 接收 UART3 发送 AES SHA 接收 AI 接收 FFT 接收 FFT 发送 I2S0 发送 I2S0 接收

253 第 21 章系统控制 247 成员名称 SYSCTL_DMA_SELECT_I2S1_TX_REQ SYSCTL_DMA_SELECT_I2S1_RX_REQ SYSCTL_DMA_SELECT_I2S2_TX_REQ SYSCTL_DMA_SELECT_I2S2_RX_REQ 描述 I2S1 发送 I2S1 接收 I2S2 发送 I2S2 接收 sysctl_power_bank_t 描述 电源域编号 定义 typedef enum _sysctl_power_bank { SYSCTL_POWER_BANK0, SYSCTL_POWER_BANK1, SYSCTL_POWER_BANK2, SYSCTL_POWER_BANK3, SYSCTL_POWER_BANK4, SYSCTL_POWER_BANK5, SYSCTL_POWER_BANK6, SYSCTL_POWER_BANK7, SYSCTL_POWER_BANK_MAX, } sysctl_power_bank_t ; 成员 成员名称 SYSCTL_POWER_BANK0 SYSCTL_POWER_BANK1 SYSCTL_POWER_BANK2 SYSCTL_POWER_BANK3 SYSCTL_POWER_BANK4 SYSCTL_POWER_BANK5 SYSCTL_POWER_BANK6 SYSCTL_POWER_BANK7 描述电源域 0, 控制 IO0-IO5 电源域 1, 控制 IO6-IO11 电源域 2, 控制 IO12-IO17 电源域 3, 控制 IO18-IO23 电源域 4, 控制 IO24-IO29 电源域 5, 控制 IO30-IO35 电源域 6, 控制 IO36-IO41 电源域 7, 控制 IO42-IO47

254 第 21 章 系统控制 sysctl_io_power_mode_t 描述 IO 输出电压值 定义 typedef enum _sysctl_io_power_mode { SYSCTL_POWER_V33, SYSCTL_POWER_V18 } sysctl_io_power_mode_t ; 成员 成员名称 描述 SYSCTL_POWER_V33 设置为 3.3V SYSCTL_POWER_V18 设置为 1.8V sysctl_reset_enum_status_t 描述 复位状态 定义 typedef enum _sysctl_reset_enum_status { SYSCTL_RESET_STATUS_HARD, SYSCTL_RESET_STATUS_SOFT, SYSCTL_RESET_STATUS_WDT0, SYSCTL_RESET_STATUS_WDT1, SYSCTL_RESET_STATUS_MAX, } sysctl_reset_enum_status_t ; 成员 成员名称 SYSCTL_RESET_STATUS_HARD SYSCTL_RESET_STATUS_SOFT 描述 硬件复位, 重新上电或触发 reset 管脚 软件复位

255 第 21 章系统控制 249 成员名称 SYSCTL_RESET_STATUS_WDT0 SYSCTL_RESET_STATUS_WDT1 描述 看门狗 0 复位 看门狗 1 复位

256 250 第 22 章 平台相关 (BSP) 22.1 概述 平台相关的通用函数, 核之间锁的相关操作 22.2 功能描述 提供获取当前运行程序的 CPU 核编号的接口以及启动第二个核的入口 22.3 API 参考 对应的头文件 bsp.h 为用户提供以下接口 register_core1 current_coreid read_cycle spinlock_lock spinlock_unlock spinlock_trylock corelock_lock corelock_trylock corelock_unlock sys_register_putchar sys_register_getchar sys_stdin_flush

257 第 22 章平台相关 (BSP) 251 get_free_heap_size printk register_core 描述 向 1 核注册函数, 并启动 1 核 函数原型 int register_core1 ( core_function func, void ctx ) 参数 参数名称描述输入输出 func 向 1 核注册的函数输入 ctx 函数的参数, 没有设置为 NULL 输入 返回值 返回值 描述 0 成功 非 0 失败 current_coreid 描述 获取当前 CPU 核编号 函数原型 # define current_coreid () read_csr ( mhartid ) 参数

258 第 22 章平台相关 (BSP) 返回值 当前所在 CPU 核的编号 read_cycle 描述获取 CPU 开机至今的时钟数 可以用使用这个函数精准的确定程序运行时钟 可以配合 sysctl_clock_get_freq(sysctl_clock_cpu) 计算运行的时间 函数原型 # define read_cycle () read_csr ( mcycle ) 参数 返回值 开机至今的 CPU 时钟数 spinlock_lock 描述 自旋锁, 不可嵌套, 不建议在中断使用, 中断中可以使用 spinlock_trylock 函数原型 void spinlock_lock ( spinlock_t lock ) 参数 自旋锁, 要使用全局变量 返回值

259 第 22 章平台相关 (BSP) spinlock_trylock 描述 获取自旋锁, 成功获取锁会返回 0, 失败返回 函数原型 int spinlock_trylock ( spinlock_t lock ) 参数 自旋锁, 要使用全局变量 返回值 返回值 描述 0 成功 非 0 失败 spinlock_unlock 描述 自旋锁解锁 函数原型 void spinlock_unlock ( spinlock_t lock ) 参数 核间锁, 要使用全局变量, 参见举例 返回值

260 第 22 章平台相关 (BSP) corelock_lock 描述 获取核间锁, 核之间互斥的锁, 同核内该锁会嵌套, 只有异核之间会阻塞 不建议在中断使用该函数, 中断中可以使用 corelock_trylock 函数原型 void corelock_lock ( corelock_t lock ) 参数 核间锁, 要使用全局变量, 参见举例 返回值 corelock_trylock 描述 获取核间锁, 同核时锁会嵌套, 异核时非阻塞 成功获取锁会返回 0, 失败返回 函数原型 corelock_trylock ( corelock_t lock ) 参数 核间锁, 要使用全局变量, 参见举例 返回值 返回值 描述 0 成功 非 0 失败

261 第 22 章 平台相关 (BSP) corelock_unlock 描述 核间锁解锁 函数原型 void corelock_unlock ( corelock_t lock ) 参数 核间锁, 要使用全局变量, 参见举例 返回值 sys_register_getchar 描述 注册系统输入回调函数,scanf 时会调用该函数 系统默认使用 UART3, 如果需要修改 UART 则调用 uartdebuginit 函数, 具体请到 uart 章节查看该函数 函数原型 void sys_register_getchar ( sys_getchar_t getchar ); 参数 参数名称描述输入输出 getchar 回调函数输入 返回值

262 第 22 章平台相关 (BSP) sys_register_putchar 描述 注册系统输出回调函数,printf 时会调用该函数 系统默认使用 UART3, 如果需要修改 UART 则调用 uartdebuginit 函数, 具体请到 uart 章节查看该函数 函数原型 void sys_register_putchar ( sys_putchar_t putchar ) 参数 参数名称描述输入输出 putchar 回调函数输入 返回值 sys_stdin_flush 描述 清理 stdin 缓存 参数 返回值 get_free_heap_size 描述 获取空闲内存大小 函数原型

263 第 22 章平台相关 (BSP) 257 size_t get_free_heap_size ( void ) 参数 返回值 空闲内存大小 举例 / 1 核在 0 核第二次释放锁的时候才会获取到锁, 通过读 cycle 计算时间 / # include <stdio.h> # include "bsp.h" # include <unistd.h> # include " sysctl.h" corelock_t lock ; uint64_t get_time ( void ) { uint64_t v_cycle = read_cycle (); return v_cycle / sysctl_clock_get_freq ( SYSCTL_CLOCK_CPU ); } int core1_function ( void ctx) { uint64_t core = current_coreid (); printf (" Core % ld Hello world \n", core ); while (1) { uint64_t start = get_time (); corelock_lock (& lock ); printf (" Core % ld Hello world \n", core ); sleep (1); corelock_unlock (& lock ); uint64_t stop = get_time (); printf (" Core % ld lock time is % ld us\n",core, stop - start ); usleep (10); } } int main ( void ) { uint64_t core = current_coreid (); printf (" Core % ld Hello world \n", core ); register_core1 ( core1_function, NULL );

264 第 22 章平台相关 (BSP) 258 } while (1) { corelock_lock (& lock ); sleep (1); printf ("1> Core % ld sleep 1\ n", core ); corelock_lock (& lock ); sleep (2); printf ("2> Core % ld sleep 2\ n", core ); printf ("2> Core unlock \n"); corelock_unlock (& lock ); sleep (1); printf ("1> Core unlock \n"); corelock_unlock (& lock ); usleep (10); } 22.4 数据类型 相关数据类型 数据结构定义如下 : core_function:cpu 核调用的函数 spinlock_t: 自旋锁 corelock_t: 核间锁 core_function 描述 CPU 核调用的函数 定义 typedef int ( core_function )( void ctx ); spinlock_t 自旋锁 定义 typedef struct _spinlock {

265 第 22 章平台相关 (BSP) 259 int lock ; } spinlock_t ; corelock_t 核间锁 定义 typedef struct _corelock { spinlock_t lock ; int count ; int core ; } corelock_t ;

i 关于本手册 本文档为用户提供基于 FreeRTOS SDK 开发时的编程指南. 对应 SDK 版本 Kendryte FreeRTOS SDK v0.4.0 (9c7b0e0d23e46e87a2bfd4dd86d1a1f0d3c899e9) 发布说明 日期版本发布说明 V

i 关于本手册 本文档为用户提供基于 FreeRTOS SDK 开发时的编程指南. 对应 SDK 版本 Kendryte FreeRTOS SDK v0.4.0 (9c7b0e0d23e46e87a2bfd4dd86d1a1f0d3c899e9) 发布说明 日期版本发布说明 V K FreeRTOS SDK 编程指南 KENDRYTE 勘智 嘉楠科技版权 2019 KENDRYTE.COM i 关于本手册 本文档为用户提供基于 FreeRTOS SDK 开发时的编程指南. 对应 SDK 版本 Kendryte FreeRTOS SDK v0.4.0 (9c7b0e0d23e46e87a2bfd4dd86d1a1f0d3c899e9) 发布说明 日期版本发布说明 2018-10-12

More information

說 明 會 內 容 全 民 健 保 暨 施 行 細 則 修 正 之 承 保 重 點 與 案 例 說 明 二 代 健 保 實 施 後 就 醫 權 益 更 有 保 障 補 充 保 險 費 知 識 自 我 檢 測 及 討 論 附 錄 全 民 健 康 保 險 保 險 費 負 擔 金 額 表 ( 四 )- 職

說 明 會 內 容 全 民 健 保 暨 施 行 細 則 修 正 之 承 保 重 點 與 案 例 說 明 二 代 健 保 實 施 後 就 醫 權 益 更 有 保 障 補 充 保 險 費 知 識 自 我 檢 測 及 討 論 附 錄 全 民 健 康 保 險 保 險 費 負 擔 金 額 表 ( 四 )- 職 第 二 三 類 投 保 單 位 二 代 健 保 實 務 說 明 會 行 政 院 衛 生 署 全 民 健 康 保 險 局 南 區 業 務 組 說 明 會 內 容 全 民 健 保 暨 施 行 細 則 修 正 之 承 保 重 點 與 案 例 說 明 二 代 健 保 實 施 後 就 醫 權 益 更 有 保 障 補 充 保 險 費 知 識 自 我 檢 測 及 討 論 附 錄 全 民 健 康 保 險 保 險 費

More information

i 关于本手册 本文档为用户提供 Kendryte 硬件技术规格简介 发布说明 日期 版本 发布说明 V0.1.0 初始版本 V0.1.1 修正 SPI 与 GPIO 中错误的描述 V0.1.2 修正第一章节出现的错别字

i 关于本手册 本文档为用户提供 Kendryte 硬件技术规格简介 发布说明 日期 版本 发布说明 V0.1.0 初始版本 V0.1.1 修正 SPI 与 GPIO 中错误的描述 V0.1.2 修正第一章节出现的错别字 K 技术规格书 KENDRYTE 勘智 嘉楠科技版权 2019 KENDRYTE.COM i 关于本手册 本文档为用户提供 Kendryte 硬件技术规格简介 发布说明 日期 版本 发布说明 2018-08-01 V0.1.0 初始版本 2018-09-13 V0.1.1 修正 SPI 与 GPIO 中错误的描述 2018-09-14 V0.1.2 修正第一章节出现的错别字 2018-09-17 V0.1.3

More information

Microsoft Word - edu-re~1.doc

Microsoft Word - edu-re~1.doc 前 言 學 習, 可 以 為 個 創 造 未 來 ; 教 育, 能 夠 為 社 會 開 拓 明 對 個 而 言, 教 育 可 以 幫 助 每 個 發 展 潛 能 建 構 知 識 及 提 升 個 素 質 ; 它 賦 予 每 個 掌 握 前 途 和 開 拓 未 來 的 能 力 對 社 會 而 言, 教 育 不 單 可 以 培 育 才, 而 且 具 有 ㆒ 個 更 深 層 的 意 義, 它 給 予 社 會

More information

Microsoft Word - 發布版---規範_全文_.doc

Microsoft Word - 發布版---規範_全文_.doc 建 築 物 無 障 礙 設 施 設 計 規 範 內 政 部 97 年 4 年 10 日 台 內 營 字 第 0970802190 號 令 訂 定, 自 97 年 7 月 1 日 生 效 內 政 部 97 年 12 年 19 日 台 內 營 字 第 0970809360 號 令 修 正 內 政 部 101 年 11 年 16 日 台 內 營 字 第 1010810415 號 令 修 正 目 錄 第 一

More information

概 述 随 着 中 国 高 等 教 育 数 量 扩 张 目 标 的 逐 步 实 现, 提 高 教 育 质 量 的 重 要 性 日 益 凸 显 发 布 高 校 毕 业 生 就 业 质 量 年 度 报 告, 是 高 等 学 校 建 立 健 全 就 业 状 况 反 馈 机 制 引 导 高 校 优 化 招

概 述 随 着 中 国 高 等 教 育 数 量 扩 张 目 标 的 逐 步 实 现, 提 高 教 育 质 量 的 重 要 性 日 益 凸 显 发 布 高 校 毕 业 生 就 业 质 量 年 度 报 告, 是 高 等 学 校 建 立 健 全 就 业 状 况 反 馈 机 制 引 导 高 校 优 化 招 I 概 述 随 着 中 国 高 等 教 育 数 量 扩 张 目 标 的 逐 步 实 现, 提 高 教 育 质 量 的 重 要 性 日 益 凸 显 发 布 高 校 毕 业 生 就 业 质 量 年 度 报 告, 是 高 等 学 校 建 立 健 全 就 业 状 况 反 馈 机 制 引 导 高 校 优 化 招 生 和 专 业 结 构 改 进 人 才 培 养 模 式 及 时 回 应 社 会 关 切 的 一 项

More information

鱼类丰产养殖技术(二).doc

鱼类丰产养殖技术(二).doc ...1...1...4...15...18...19...24...26...31...35...39...48...57...60...62...66...68...72 I ...73...88...91...92... 100... 104... 144... 146... 146... 147... 148... 148... 148... 149... 149... 150... 151...

More information

疾病诊治实务(一)

疾病诊治实务(一) ...1...4...5...8...13...14...15...18...18...19...22...25...26...27...29...30...32...35 I ...38...42...43...45...48...51...53...56...59...60...60...61...63...65...67...69...72...74...77...80...82...84 II

More information

名人养生.doc

名人养生.doc I...1...3...4...6... 11...14...18...22...26...29...31...38...45...49...56...57...59...61...67 ...72...73...75...77...80...83...85...91...92...93...95...96...97... 103... 107... 109... 110... 112... 118...

More information

<4D6963726F736F667420576F7264202D2040B9C5B871A661B0CFABC8AE61C2A7AB55ACE3A8735FA7F5ABD8BFB3B9C5B871A661B0CFABC8AE61C2A7AB55ACE3A8732E646F63>

<4D6963726F736F667420576F7264202D2040B9C5B871A661B0CFABC8AE61C2A7AB55ACE3A8735FA7F5ABD8BFB3B9C5B871A661B0CFABC8AE61C2A7AB55ACE3A8732E646F63> 嘉 義 地 區 客 家 禮 俗 研 究 第 一 章 前 言 嘉 義 地 區 的 客 家 族 群 約 略 可 分 為 福 佬 客 詔 安 客 與 北 部 客 等 三 種 類 別, 其 分 佈 區 域 以 海 線 地 區 平 原 地 形 沿 山 地 區 為 主 有 相 當 多 的 北 部 客 家 人, 是 二 次 大 戰 末 期 和 戰 後 初 期 才 移 民 嘉 義, 是 什 麼 因 素 令 許 多

More information

05301930

05301930 國 立 中 正 大 學 法 學 系 碩 士 論 文 河 川 砂 石 法 規 範 之 探 討 - 以 採 取 土 石 及 挖 掘 河 川 認 定 基 準 為 主 指 導 教 授 : 盧 映 潔 博 士 研 究 生 : 王 瑞 德 中 華 民 國 一 百 零 一 年 五 月 目 錄 第 一 章 緒 論... 1 第 一 節 研 究 動 機... 1 第 二 節 研 究 目 的... 3 第 三 節 研

More information

中老年保健必读(十).doc

中老年保健必读(十).doc ...1...2...3...4...5...6...8...9... 11 - -...13...15...17...18...20...22...23...25...26...28 I II...30...32...34...35...38...40...42...44...46...47...48...50...52...53 X...55...56...57...58...60...61...63...65

More information

23 29 15.6% 23 29 26.2% 3 25 2 15 1 5 1,542 12,336 14,53 16,165 18,934 22,698 25,125 25 2 15 1 5 5,557 7,48 8,877 11, 13,732 17,283 22,485 23 24 25 26

23 29 15.6% 23 29 26.2% 3 25 2 15 1 5 1,542 12,336 14,53 16,165 18,934 22,698 25,125 25 2 15 1 5 5,557 7,48 8,877 11, 13,732 17,283 22,485 23 24 25 26 4, 197823 2916.3%29 335, 23 29.5% 23 29 16.3% 14 35 33,535 14 135 13 125 1,292 1,3 1,38 1,314 1,321 1,328 1,335 3 25 2 15 1 5 1. 1.1 13,582 15,988 1.4 18,322 11.6 11.9 21,192 24,953 3,67 9. 8.7 12 1 8

More information

穨ecr1_c.PDF

穨ecr1_c.PDF i ii iii iv 1 2 3 4 5 5555522 6664422 77722 6 7 8 9 10 11 22266 12833 1894 12 13 14 15 16 17 18 19 20 21 22 23 24 25 8.14 2.15 2.18 26 27 28 29 30 31 2.16 2.18 5.23 32 33 34 35 36 37 38 39 40 41 42 43

More information

穨2005_-c.PDF

穨2005_-c.PDF 2005 10 1 1 1 2 2 3 5 4 6 2 7 3 11 4 1 13 2 13 3 14 4 14 5 15 6 16 7 16 8 17 9 18 10 18 2005 10 1 1. 1.1 2 1.2 / / 1.3 69(2) 70(2) 1.4 1.5 1.6 2005 10 1 2. 2.1 2.2 485 20(8) (a) (i) (ii) (iii) (iv) 571

More information

北京理工大学.doc

北京理工大学.doc ( )...1...6...8...10...20...22...24...28...30...32...40 I ...53...55...61 ( )...62...71...74 ( )...77...81...84...86...88...89...91...92...96...99... 110...111... 112 II ... 113... 114... 115... 116...

More information

尲㐵.⸮⸮⸮⸮⸮

尲㐵.⸮⸮⸮⸮⸮ I...1...2...3...4...5...6...8...9...10... 11...12...13...14...15...16...17...18...19...20...21...22...23...24...26 II...27...28...28...29...30...31...32...34...35...36...37...38...39...39...40...41...43...43...44...45...46...47...48...48...49...50

More information

果树高产栽培技术(一).doc

果树高产栽培技术(一).doc ( ) ...1...1...3...10... 11...12...15...17...18...19...20...22...23...24...26...27...28...30...31...32 I ...36...38...40...41...42...44...45...47...48...49...50...51...52...53...55...58...59...60...61...62...66...67

More information

物质结构_二_.doc

物质结构_二_.doc I...1...3...6...8 --... 11 --...12 --...13 --...15 --...16 --...18 --...19 --...20 --...22 --...24 --...25 --...26 --...28 --...30 --...32 --...34 --...35 --...37 --...38...40 II...41...44...46...47...48...49...51...52...55...58

More information

第一節 研究動機與目的

第一節 研究動機與目的 中 國 文 化 大 學 中 國 文 學 研 究 所 碩 士 論 文 華 嚴 一 真 法 界 思 想 研 究 指 導 教 授 : 王 俊 彥 研 究 生 : 許 瑞 菁 中 華 民 國 98 年 12 月 自 序 在 佛 教 經 典 中 最 初 接 觸 的 是 佛 說 無 量 壽 經, 此 經 乃 大 方 廣 佛 華 嚴 經 的 精 華 版 綱 要 版 為 了 瞭 解 經 義, 深 知 宇 宙 運

More information

水力发电(九)

水力发电(九) ...1...17...20...26...27...30...33...34...36...37...44...47...49...58...77...79...90...96...107 I ...114...115...132...134...137...138...139...140...142...142...144...146...146...146...148...148...149...149...150...151...151...152

More information

中国古代文学家(八).doc

中国古代文学家(八).doc ...1...5...26...27...43...44...48...50...52...54...55...57...60...61...62...63...65...67...68 I ...69...70...71...75...77...78...82...84...95...98...99... 101... 103... 107... 108... 109... 110...111...

More information

景观植物(一)

景观植物(一) ...1...5...6...8... 11...13...15...18...21...23...26...29...43...51 5...53...58...62...63...65 I ...67...70...72...74...76...77...78...80...81...84...85...87...88...90...92...94...97... 109... 113... 115...

More information

Microsoft Word - 目录.doc

Microsoft Word - 目录.doc 教 学 管 理 文 件 汇 编 目 录 教 育 法 规 和 指 导 性 文 件 1. 中 华 人 民 共 和 国 高 等 教 育 法 1 2. 中 华 人 民 共 和 国 教 师 法 8 3. 普 通 高 等 学 校 学 生 管 理 规 定 12 4. 高 等 学 校 学 生 行 为 准 则 18 5. 中 华 人 民 共 和 国 学 位 条 例 19 6. 高 等 学 校 教 学 管 理 要 点

More information

园林植物卷(三).doc

园林植物卷(三).doc I II III IV 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 84k 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65

More information

厨房小知识_一_

厨房小知识_一_ ... 1... 1... 2... 3... 3... 5... 6... 7... 7... 8... 10...11... 12... 13... 15... 17... 18... 19... 19... 20... 23... 24... 24 ... 26... 26... 29... 30... 31... 32... 33... 34... 37... 38... 40... 41...

More information

中南财经大学(七).doc

中南财经大学(七).doc ...1...16...20...22...31...32...34...37...38...40...44...46...54...58...59...60...61 I ...62...63...70...77...79...81...84...90...93...95...95...97... 100... 102... 104... 105... 106... 107... 109... 113

More information

赵飞燕外传、四美艳史演义

赵飞燕外传、四美艳史演义 \ I... 1...1...8... 9... 9...9...11...13...16...19...22...25...28...33...36...39...42 II...46...48...51...55...58...62... 67...67...70...73...76...79...83...86...89...92...96...99... 102... 105... 108...

More information

厨房小知识(五)

厨房小知识(五) I...1...2...3...4...5...6 ()...7 ()...9...10...10... 11...12...13...14...15...15...16...18...19...20...20...21...21 II...24...27...28...29...29...31...32...33...34...35...36...38...38...39...40...40...41...42...42...43...44...44...47...48...50...50

More information

园林植物卷(十二).doc

园林植物卷(十二).doc ... 1... 4... 8... 8... 9... 9...11... 13... 15... 20... 23... 30... 31... 36... 39... 40... 43 I ... 47... 52... 57... 60 1... 65 2... 71 (3)... 78... 81... 87... 89... 91... 94... 95... 97 ( )... 100...

More information

國立中山大學學位論文典藏

國立中山大學學位論文典藏 I...1...1...4...4...6...6...13...24...29...44...44...45...46...47...48...50...50...56...60...64...68...73...73...85...92...99...105...113...121...127 ...127...131...135...142...145...148 II III IV 1 2

More information

乳业竞争_一_

乳业竞争_一_ ...1...7...10... 11...14...17...18...19...21...23...25...26...28 50...30...31 48...31 3000...34...35...37 I ...40...44...45...48...50...51...55...56...58...58...60 ()...62 ()...66...71...72...72...73...76...77

More information

untitled

untitled ...1 1...1...3...5...6...8...8...15...16...19 21...21...24...25...26...29...30...33...36...38...41...41 ( )...41...42...48...48...57...57...63...67...67...67...67...71...74 I ...76...76...79...81...82...82...83...83...83...84...84...85...85...85

More information

中国政法大学(六).doc

中国政法大学(六).doc ...1...6...8 2004... 11...15 2003...16...20...29...32...34...38...39...42...43...44...48 I ...53...58...61...63...71...75...77...79...83...91...94...95...98... 100... 102... 102... 105... 106... 107...

More information

胎儿健康成长.doc

胎儿健康成长.doc ...1...2...5...6...7...8...9... 11...13...15...16...17...19...22...22...23...24...25 I II...26...27...30...31...32...33...36...38...38...39...40...43...44...46...46...47...48...50...52...54...55...59 ...62

More information

1. 本文首段的主要作用是 A. 指出 異蛇 的藥用功效 說明 永之人爭奔走焉 的原因 B. 突出 異蛇 的毒性 為下文 幾死者數矣 作鋪墊 C. 交代以蛇賦稅的背景 引起下文蔣氏有關捕蛇的敘述 2. 本文首段從三方面突出蛇的 異 下列哪一項不屬其中之一 A. 顏色之異 B. 動作之異 C. 毒性之

1. 本文首段的主要作用是 A. 指出 異蛇 的藥用功效 說明 永之人爭奔走焉 的原因 B. 突出 異蛇 的毒性 為下文 幾死者數矣 作鋪墊 C. 交代以蛇賦稅的背景 引起下文蔣氏有關捕蛇的敘述 2. 本文首段從三方面突出蛇的 異 下列哪一項不屬其中之一 A. 顏色之異 B. 動作之異 C. 毒性之 1. 本文首段的主要作用是 A. 指出 異蛇 的藥用功效 說明 永之人爭奔走焉 的原因 B. 突出 異蛇 的毒性 為下文 幾死者數矣 作鋪墊 C. 交代以蛇賦稅的背景 引起下文蔣氏有關捕蛇的敘述 2. 本文首段從三方面突出蛇的 異 下列哪一項不屬其中之一 A. 顏色之異 B. 動作之異 C. 毒性之異 3. 太醫以王命聚之 中的 以 字與下列哪一項的 以 意思相同 A. 以齧人 B. 而吾以捕蛇獨存

More information

bnbqw.PDF

bnbqw.PDF 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 ( ( 1 2 16 1608 100004 1 ( 2003 2002 6 30 12 31 7 2,768,544 3,140,926 8 29,054,561 40,313,774 9 11,815,996 10,566,353 11 10,007,641 9,052,657 12 4,344,697

More information

nb.PDF

nb.PDF 3 4 5 7 8 9..10..15..16..19..52 -3,402,247-699,783-1,611,620 1,790,627 : - - -7,493 - -1,687 2,863 1,176 2,863 - -148,617 - - 12,131 51,325 - -12,131-2,165 14-2,157 8-3,393,968-794,198-1,620,094 1,781,367

More information

第三章

第三章 第 三 章 :2017 年 行 政 長 官 產 生 辦 法 - 可 考 慮 的 議 題 行 政 長 官 的 憲 制 及 法 律 地 位 3.01 基 本 法 第 四 十 三 條 規 定 : 香 港 特 別 行 政 區 行 政 長 官 是 香 港 特 別 行 政 區 的 首 長, 代 表 香 港 特 別 行 政 區 香 港 特 別 行 政 區 行 政 長 官 依 照 本 法 的 規 定 對 中 央 人

More information

untitled

untitled 1993 79 2010 9 80 180,000 (a) (b) 81 20031,230 2009 10,610 43 2003 2009 1,200 1,000 924 1,061 800 717 600 530 440 400 333 200 123 0 2003 2004 2005 2006 2007 2008 2009 500 2003 15,238 2009 31,4532003 2009

More information

南華大學數位論文

南華大學數位論文 南 華 大 學 哲 學 與 生 命 教 育 學 系 碩 士 論 文 呂 氏 春 秋 音 樂 思 想 研 究 研 究 生 : 何 貞 宜 指 導 教 授 : 陳 章 錫 博 士 中 華 民 國 一 百 零 一 年 六 月 六 日 誌 謝 論 文 得 以 完 成, 最 重 要 的, 是 要 感 謝 我 的 指 導 教 授 陳 章 錫 博 士, 老 師 總 是 不 辭 辛 勞 仔 細 閱 讀 我 的 拙

More information

Microsoft Word - 3.3.1 - 一年級散文教案.doc

Microsoft Word - 3.3.1 - 一年級散文教案.doc 光 明 英 來 學 校 ( 中 國 文 學 之 旅 --- 散 文 小 說 教 學 ) 一 年 級 : 成 語 ( 主 題 : 勤 學 ) 節 數 : 六 教 節 ( 每 課 題 一 教 節 ) 課 題 : 守 株 待 兔 半 途 而 廢 愚 公 移 山 鐵 杵 磨 針 孟 母 三 遷 教 學 目 的 : 1. 透 過 活 動, 學 生 能 說 出 成 語 背 後 的 含 意 2. 學 生 能 指

More information

Microsoft Word - 08 单元一儿童文学理论

Microsoft Word - 08 单元一儿童文学理论 单 元 ( 一 ) 儿 童 文 学 理 论 内 容 提 要 : 本 单 元 共 分 成 三 个 小 课 目, 即 儿 童 文 学 的 基 本 理 论 儿 童 文 学 创 作 和 儿 童 文 学 的 鉴 赏 与 阅 读 指 导 儿 童 文 学 的 基 本 理 论 内 容 包 括 儿 童 文 学 的 基 本 含 义 儿 童 文 学 读 者 儿 童 文 学 与 儿 童 年 龄 特 征 和 儿 童 文 学

More information

項 訴 求 在 考 慮 到 整 體 的 財 政 承 擔 以 及 資 源 分 配 的 公 平 性 下, 政 府 採 取 了 較 簡 單 直 接 的 一 次 性 減 稅 和 增 加 免 稅 額 方 式, 以 回 應 中 產 家 庭 的 不 同 訴 求 ( 三 ) 取 消 外 傭 徵 費 6. 行 政 長

項 訴 求 在 考 慮 到 整 體 的 財 政 承 擔 以 及 資 源 分 配 的 公 平 性 下, 政 府 採 取 了 較 簡 單 直 接 的 一 次 性 減 稅 和 增 加 免 稅 額 方 式, 以 回 應 中 產 家 庭 的 不 同 訴 求 ( 三 ) 取 消 外 傭 徵 費 6. 行 政 長 2013 年 1 月 23 日 的 立 法 會 會 議 葛 珮 帆 議 員 就 幫 助 中 產 動 議 的 議 案 ( 經 單 仲 偕 議 員 及 莫 乃 光 議 員 修 正 ) 進 度 報 告 在 2013 年 1 月 23 日 的 立 法 會 會 議 上, 由 葛 珮 帆 議 員 就 幫 助 中 產 動 議 的 議 案, 經 單 仲 偕 議 員 及 莫 乃 光 議 員 修 正 後 獲 得 通 過

More information

(f) (g) (h) (ii) (iii) (a) (b) (c) (d) 208

(f) (g) (h) (ii) (iii) (a) (b) (c) (d) 208 (a) (b) (c) (d) (e) 207 (f) (g) (h) (ii) (iii) (a) (b) (c) (d) 208 17.29 17.29 13.16A(1) 13.18 (a) (b) 13.16A (b) 12 (a) 209 13.19 (a) 13.16A 12 13.18(1) 13.18(4) 155 17.43(1) (4) (b) 13.19 17.43 17.29

More information

BT&BLE_Coexistence_Demo__CN.pages

BT&BLE_Coexistence_Demo__CN.pages ESP32 BT&BLE 双模 蓝 牙共存说明 版本 1.0 版权 2018 关于本 手册 本 文档为 ESP32 BT&BLE 双模蓝 牙共存说明 发布说明 日期版本发布说明 V1.0 首次发布 文档变更更通知 用户可通过乐鑫官 网订阅技术 文档变更更的电 子邮件通知 证书下载 用户可通过乐鑫官 网下载产品证书 目录 1. BT&BLE 共存结构图... 1 2. 流程说明... 2 2.1. 初始化流程...

More information

cgn

cgn 3654 ( 571 ) 88(4) 2014 3 31 10766 10778 2014 3 31 ( ) 2 21 ( ) 2014 3 31 10768 10778 6 9 1. ( ) 2. 3. 4. 5. 2014 6 3 ( ) 10768 10778 ( ) 2014 3 31 ( 622 ) 11 80 2014 3 31 2014 6 3 10 8 2014 3 31 ( ) 2014

More information

C++ 程序设计 告别 OJ1 - 参考答案 MASTER 2019 年 5 月 3 日 1

C++ 程序设计 告别 OJ1 - 参考答案 MASTER 2019 年 5 月 3 日 1 C++ 程序设计 告别 OJ1 - 参考答案 MASTER 2019 年 月 3 日 1 1 INPUTOUTPUT 1 InputOutput 题目描述 用 cin 输入你的姓名 ( 没有空格 ) 和年龄 ( 整数 ), 并用 cout 输出 输入输出符合以下范例 输入 master 999 输出 I am master, 999 years old. 注意 "," 后面有一个空格,"." 结束,

More information

ESP-Jumpstart

ESP-Jumpstart 2016-2019 2019 08 08 Contents 1 3 1.1 ESP32.............................. 3 1.2.................................................. 5 2 7 2.1............................................. 7 2.2 ESP-IDF............................................

More information

南華大學數位論文

南華大學數位論文 1 Key word I II III IV V VI 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61

More information

CC213

CC213 : (Ken-Yi Lee), E-mail: [email protected] 49 [P.51] C/C++ [P.52] [P.53] [P.55] (int) [P.57] (float/double) [P.58] printf scanf [P.59] [P.61] ( / ) [P.62] (char) [P.65] : +-*/% [P.67] : = [P.68] : ,

More information

Sipeed Maix-GO 觗怼书 V1.1.docx

Sipeed Maix-GO 觗怼书 V1.1.docx Sipeed Maix-GO 规格书 v1.1 特性 : Datesheet CPU : RISC-V 双核 64bit 内置 FPU 400Mhz 标准频率 ( 可超频 ), 内置神经网络处理器 图像识别 : QVGA@60FPS/VGA@30FPS 音频接口 : 支持 Sipeed R6+1 麦克风阵列板 ( 通过 FPC10 连接器连接 ) 和 2x3W 扬声器 电源管理 : 充电电流达到 2.5A;

More information

马太亨利完整圣经注释—雅歌

马太亨利完整圣经注释—雅歌 第 1 页 目 录 雅 歌 简 介... 2 雅 歌 第 一 章... 2 雅 歌 第 二 章... 10 雅 歌 第 三 章... 16 雅 歌 第 四 章... 20 雅 歌 第 五 章... 25 雅 歌 第 六 章... 32 雅 歌 第 七 章... 36 雅 歌 第 八 章... 39 第 2 页 雅 歌 简 介 我 们 坚 信 圣 经 都 是 神 所 默 示 的 ( 提 摩 太 后 书

More information

二零零六年一月二十三日會議

二零零六年一月二十三日會議 附 件 B 有 关 政 策 局 推 行 或 正 在 策 划 的 纾 缓 及 预 防 贫 穷 措 施 下 文 载 述 有 关 政 策 局 / 部 门 为 加 强 纾 缓 及 预 防 贫 穷 的 工 作, 以 及 为 配 合 委 员 会 工 作, 在 过 去 十 一 个 月 公 布 及 正 在 策 划 的 新 政 策 和 措 施 生 福 利 及 食 物 局 (i) 综 合 儿 童 发 展 服 务 2.

More information

(1) (2) (3) 1. (1) 2

(1) (2) (3) 1. (1) 2 0386 71.32% 14A 1 (1) (2) (3) 1. (1) 2 (a) (b) (i) (ii) (iii) 3 (iv) (a) (b) (c) (d) 6% 4 2013 3 26 [2013]624 10 5 2013 6 28 [2013]1246 2015 3 [2015]351 0.2 6 [2015]748 180C 7 * * 8 14A (2) 417,800,000

More information

(Microsoft Word - 1012-2\256\325\260\310\267|\304\263\254\366\277\375.doc)

(Microsoft Word - 1012-2\256\325\260\310\267|\304\263\254\366\277\375.doc) 國 立 屏 北 高 級 中 學 101 學 年 度 第 2 學 期 第 2 次 校 務 會 議 紀 錄 壹 會 議 名 稱 :101 學 年 度 第 2 學 期 第 2 次 校 務 會 議 貳 時 間 :102 年 6 月 28 日 ( 星 期 五 ) 下 午 13 時 10 分 參 地 點 : 本 校 圖 書 館 四 樓 視 聽 會 議 室 肆 出 列 席 人 員 : 詳 如 簽 到 簿 伍 主

More information

厨房小知识(四)

厨房小知识(四) I...1...2...3...4...4...5...6...6...7...9...10... 11...12...12...13...14...15...16...17...18...18...19...22...22 II...23...24...25...26...27...27...28...29...29...30...31...31?...32...32...33?...33...34...34...35...36...36...37...37...38...38...40

More information

妇女更年期保健.doc

妇女更年期保健.doc ...1...2...3...5...6...7 40...8... 11...13...14...16...17...19...20...21...26...29...30...32 I ...34...35...37...41...46...50...51...52...53...54...55...58...64...65 X...67...68...70...70...74...76...78...79

More information

小儿传染病防治(上)

小儿传染病防治(上) ...1...2...3...5...7...7...9... 11...13...14...15...16...32...34...34...36...37...39 I ...39...40...41...42...43...48...50...54...56...57...59...59...60...61...63...65...66...66...68...68...70...70 II

More information

<4D6963726F736F667420576F7264202D2031303430333234B875B9B5A448ADFBBADEB27AA740B77EA4E2A5555FA95EAED6A641ADD75F2E646F63>

<4D6963726F736F667420576F7264202D2031303430333234B875B9B5A448ADFBBADEB27AA740B77EA4E2A5555FA95EAED6A641ADD75F2E646F63> 聘 僱 人 員 管 理 作 業 參 考 手 冊 行 政 院 人 事 行 政 總 處 編 印 中 華 民 國 104 年 3 月 序 人 事 是 政 通 人 和 的 關 鍵 是 百 事 俱 興 的 基 礎, 也 是 追 求 卓 越 的 張 本 唯 有 人 事 健 全, 業 務 才 能 順 利 推 動, 政 府 施 政 自 然 績 效 斐 然 本 總 處 做 為 行 政 院 人 事 政 策 幕 僚 機

More information

女性青春期保健(下).doc

女性青春期保健(下).doc ...1...4...10... 11...13...14...15...17...18...19...20...21...22...23...24...26...27...30...31 I ...32...33...36...37...38...40...41...43...44...45...46...47...50...51...51...53...54...55...56...58...59

More information

避孕知识(下).doc

避孕知识(下).doc ...1...3...6...13...13...14...15...16...17...17...18...19...19...20...20...23...24...24...25 I ...25...26...26...27...28...28...29...30...30...31...32...34...35 11...36...37...38...40...42...43...44...44...46

More information

孕妇饮食调养(下).doc

孕妇饮食调养(下).doc ...1...2...5...9 7...9...14...15...16...18...22...23...24...25...27...29...31...32...34 I ...35...36...37...39...40...40...42...44...46...48...51...52...53...53...54...55...56...56...58...61...64 II ...65...66...67...68...69...70...71...72...73...74...75...76...77...80...83...85...87...88

More information

禽畜饲料配制技术(一).doc

禽畜饲料配制技术(一).doc ( ) ...1...1...4...5...6...7...8...9...10... 11...13...14...17...18...21...23...24...26 I ...28 70...30...33...35...36...37...39...40...41...49...50...52...53...54...56...58...59...60...67...68...70...71

More information

中老年保健必读(十一).doc

中老年保健必读(十一).doc ...1...2...4...6...8...9...10...12...14...15...17...18...20...22...23...25...27...29 I ...30...32...35...38...40...42...43...45...46...48...52...55...56...59...62...63...66...67...69...71...74 II ...76...78...79...81...84...86...87...88...89...90...91...93...96...99...

More information

怎样使孩子更加聪明健康(七).doc

怎样使孩子更加聪明健康(七).doc ...1...2...2...4...5 7 8...6...7...9 1 3... 11...12...14...15...16...17...18...19...20...21...22 I II...23...24...26 1 3...27...29...31...31...33...33...35...35...37...39...41...43...44...45 3 4...47...48...49...51...52

More information

i

i i ii iii iv v vi 1 g j 2 3 4 ==== ==== ==== 5 ==== ======= 6 ==== ======= 7 ==== ==== ==== 8 [(d) = (a) (b)] [(e) = (c) (b)] 9 ===== ===== ===== ===== ===== ===== 10 11 12 13 14 15 16 17 ===== [ ] 18 19

More information

女性美容保健(四).doc

女性美容保健(四).doc ...1...4...6...8...9...10... 11...12...13...15...18...20...21...22...26...33...39...43 I II...47...52...53...59...60...63...65...68...69...71...73 1.5 ml...78...79...85...88...90...94...95...97...98...

More information

學 習 內 容 元 素 一 直 透 過 中 小 學 校 課 程 相 關 課 題 培 養, 如 : 小 學 常 識 科 人 文 學 科 和 科 學 科 等 這 些 從 沒 有 因 為 德 育 及 國 民 教 育 科 課 程 指 引 在 2012 年 擱 置 而 有 任 何 改 變 4. 教 育 局 持

學 習 內 容 元 素 一 直 透 過 中 小 學 校 課 程 相 關 課 題 培 養, 如 : 小 學 常 識 科 人 文 學 科 和 科 學 科 等 這 些 從 沒 有 因 為 德 育 及 國 民 教 育 科 課 程 指 引 在 2012 年 擱 置 而 有 任 何 改 變 4. 教 育 局 持 立 法 會 CB(4)1287/14-15(01) 2015 年 7 月 15 日 會 議 討 論 文 件 立 法 會 教 育 事 務 委 員 會 在 學 校 推 行 德 育 及 公 民 教 育 前 言 本 文 件 旨 在 就 學 校 教 育 中 推 行 德 育 及 公 民 教 育 的 進 展 ( 包 括 基 本 法 教 育 及 推 廣 對 一 國 兩 制 的 認 識 ), 匯 報 德 育 及 公

More information

int *p int a 0x00C7 0x00C7 0x00C int I[2], *pi = &I[0]; pi++; char C[2], *pc = &C[0]; pc++; float F[2], *pf = &F[0]; pf++;

int *p int a 0x00C7 0x00C7 0x00C int I[2], *pi = &I[0]; pi++; char C[2], *pc = &C[0]; pc++; float F[2], *pf = &F[0]; pf++; Memory & Pointer [email protected] 2.1 2.1.1 1 int *p int a 0x00C7 0x00C7 0x00C7 2.1.2 2 int I[2], *pi = &I[0]; pi++; char C[2], *pc = &C[0]; pc++; float F[2], *pf = &F[0]; pf++; 2.1.3 1. 2. 3. 3 int A,

More information

新婚夫妇必读(九).doc

新婚夫妇必读(九).doc ...1...3...4...5...9...9...10...12...14 3...19...20...22...27...28...30...31...35...37 I 13...39...44...48...49...50...51...54...55...58...60...62...63...66...67...68...70...71 TOP10...73...77...79...80

More information

FEELING COMFORTABLE ABOUT SEX

FEELING COMFORTABLE ABOUT SEX 轻 松 性 谈 只 要 你 轻 松 自 然 的 面 对 自 己 的 性 生 活, 就 能 轻 松 自 然 的 与 人 谈 性 " 1. 自 幼 开 始 用 直 接 而 尊 重 的 态 度 来 解 释 男 孩 子 割 包 皮 和 女 孩 子 的 生 殖 器 官 是 什 么 回 事 让 儿 女 明 白 上 帝 所 创 造 的 身 体 是 可 爱 的. 当 幼 儿 开 始 对 自 己 的 身 体 产 生

More information

390 1975 23 664 25 117 1986 Km % % % I 3.61 23.1 387.8 15.4 35.8 A 2.21 14.1 300.1 11.9 33.44 B 1.40 9.0 87.7 3.5 2.36 II 6.11

More information

婴幼儿护理(四).doc

婴幼儿护理(四).doc I...1 &...6...10 5...15...18...21...25...27...29...33...37...38...39 9...40...48...53...57...57 3...58 II...60...61...62...67...70...71...71...72...75...79...80...81...85...86...87...88 20...89...93...94...96...98...99

More information

小儿疾病防治(四).doc

小儿疾病防治(四).doc ...1...3...6...10...12...13...14...15...17...20...21...22...23...23...24...25 B...28...31...32 I ...33...35...37...40...41...43 X...44...45...47...49...50...52...52...54...56...57...59...61...62...62...63...66

More information

ii

ii 1 7 1 213 16 1 401258) H183 17M ........................................................................ ii.................................................................. 1...................................................................

More information

名人养生.doc

名人养生.doc ( 20 010010) 787 1092 1/32 498.50 4 980 2004 9 1 2004 9 1 1 1 000 ISBN 7-204-05940-9/R 019 1880.00 ( 20.00 ) I...1...3...4...6... 11...14...18...22...26...29...31...38...45...49...56...57...59...61...67

More information

常见病防治(二).doc

常见病防治(二).doc ( 20 010010) 787 1092 1/32 498.50 4 980 2004 9 1 2004 9 1 1 1 000 ISBN 7-204-05940-9/R 019 1880.00 ( 20.00 ) ...1...9...17...25...34...41...49...54...55...55...57...64...65...67...68...69...69...70...71

More information