软件基础教程 |
——DA14580DK开发板系列 |
Open-ble.org-Team |
2015/3/19 |
DA14580_DK/AK开发板系列 |
open-ble.org |
目录 |
第一节 GPIO..................................................................................................................4 1.1 GPIO引脚介绍.................................................................................................4 1.2寄存器介绍......................................................................................................4 1.2.1 P0数据寄存器......................................................................................4 1.2.2 P0设置数据寄存器..............................................................................4 1.2.3 P0复位数据寄存器..............................................................................4 1.2.4 P00模式寄存器....................................................................................5 1.2.5 P1~P3的寄存器配置............................................................................5 1.3寄存器配置讲解.............................................................................................5 第二节 Timer................................................................................................................ 7 2.1 Timer介绍....................................................................................................... 7 2.1.1 Timer0................................................................................................... 7 2.1.2 Timer2................................................................................................... 7 2.2寄存器介绍.....................................................................................................7 2.2.1定时器 0控制寄存器..........................................................................7 2.2.2定时器 0计数控制寄存器..................................................................7 2.2.3定时器 0高电平重新装载值..............................................................7 2.2.4定时器 0低电平重新装载值..............................................................8 2.2.5 PWM2占空比.......................................................................................8 2.2.6 PWM3占空比.......................................................................................8 2.2.7 PWM4占空比.......................................................................................8 2.2.8 PWM2,3,4的频率.................................................................................8 2.2.9 PWM2,3,4控制寄存器.........................................................................8 2.3寄存器配置讲解.............................................................................................8 第三节 ADC.................................................................................................................10 3.1 GPADC介绍....................................................................................................10 3.2寄存器介绍...................................................................................................10 3.2.1 ADC控制寄存器.................................................................................10 3.2.2 ADC第二控制寄存器.........................................................................11 3.2.3 ADC正偏移寄存器.............................................................................11 3.2.4 ADC负偏移寄存器.............................................................................12 3.2.5 ADC清除中断寄存器.........................................................................12 3.2.6 ADC结果寄存器.................................................................................12 3.2.7 ADC延时寄存器.................................................................................12 3.2.8 ADC第二延时寄存器.........................................................................12 3.3寄存器配置讲解...........................................................................................12 第四节中断................................................................................................................14 4.1中断介绍.......................................................................................................14 4.2寄存器介绍...................................................................................................14 4.2.1 GPIO_IRQ0中断源选择寄存器..........................................................14 4.2.2 GPIO_IRQ1中断源选择寄存器..........................................................15 4.2.3 GPIO_IRQ2中断源选择寄存器..........................................................15 |
官网地址:http://www.open-ble.org/ |
|
|
DA14580_DK/AK开发板系列 |
open-ble.org |
4.2.4 GPIO_IRQ3中断源选择寄存器..........................................................15 4.2.5 GPIO_IRQ4中断源选择寄存器..........................................................15 4.2.6 GPIO延时寄存器............................................................................... 15 4.2.7 GPIO中断复位寄存器....................................................................... 16 4.2.8 GPIO中断电平控制寄存器............................................................... 16 4.2.9键盘中断源选择寄存器 0.................................................................17 4.2.10键盘中断源选择寄存器 1...............................................................18 4.2.11键盘中断源选择寄存器 2...............................................................19 4.3寄存器配置讲解...........................................................................................19 第五节 I2C...................................................................................................................21 5.1 I2C介绍..........................................................................................................21 5.2寄存器介绍...................................................................................................21 5.2.1 I2C控制寄存器...................................................................................21 5.2.2 I2C目标地址寄存器...........................................................................22 5.2.3 I2C接收发送数据缓存与命令寄存器...............................................22 5.2.4 I2C清除TX_ABRT中断......................................................................23 5.2.5 I2C使能寄存器...................................................................................23 5.2.6 I2C状态寄存器...................................................................................24 5.2.7 I2C接收FIFO数目寄存器................................................................. 25 5.2.8 I2C发送异常终止源寄存器...............................................................25 5.3寄存器配置讲解...........................................................................................26 第六节 SPI+.................................................................................................................28 6.1 SPI+介绍.........................................................................................................28 6.2寄存器介绍...................................................................................................28 6.2.1 SPI控制寄存器0................................................................................28 6.2.2 SPI接收/发送寄存器0...................................................................... 29 6.2.3 SPI接收/发送寄存器1...................................................................... 29 6.2.4 SPI清除中断寄存器...........................................................................29 6.2.5 SPI控制寄存器1................................................................................29 6.3寄存器配置讲解...........................................................................................30 第七节 UART...............................................................................................................31 7.1 UART介绍......................................................................................................31 7.2 UART寄存器..................................................................................................31 7.2.1接收缓冲寄存器................................................................................31 7.2.2中断使能寄存器................................................................................32 7.2.3中断识别寄存器/FIFO控制寄存器..................................................33 7.2.4通信线控制寄存器............................................................................34 7.2.5调制器控制寄存器............................................................................34 7.2.6通信线状态寄存器............................................................................36 7.3寄存器配置讲解...........................................................................................38 |
官网地址:http://www.open-ble.org/ |
|
|
DA14580_DK/AK开发板系列 |
open-ble.org |
官网地址:http://www.open-ble.org/ |
DA14580_DK/AK开发板系列 |
open-ble.org |
第一节 GPIO |
1.1 GPIO引脚介绍 DA14580的 I/O引脚功能可以通过软件配置,分为4组,分别为 Port0、Port1、 Port2、Port3,其中Port2只在 QFN40与QFN48封装的芯片中,Port3只在 QFN48 封装的芯片中。 Port0有8个引脚,Port1有6个引脚(其中包括DEBUG引脚SW_CLK与SWDIO), Port2有 10个引脚,Port3有 8个引脚; 每个引脚都可以选择上拉或者下拉25KOhm的电阻; 每个引脚上拉电压在VBAT3V(降压模式)与VBAT1V(升压模式)两者可选; 4路模数转换的引脚固定分配为 Port0中的0:3引脚; 当系统进入睡眠模式时,引脚保持最后的状态。 |
1.2寄存器介绍 1.2.1 P0数据寄存器 |
15:8位:保留不使用; 7:0位:写该寄存器则设置 P0输出寄存器的值,读该寄存器则返回 P0口的 值。 1.2.2 P0设置数据寄存器 |
15:8位:保留不使用; 7:0位:写’1’到对应位则对应的引脚置’1’,写’0’无效,读该寄存器则返回 0。 1.2.3 P0复位数据寄存器 |
15:8位:保留不使用; 7:0位:写’1’到对应位则对应的引脚置’0’,写’0’无效,读该寄存器则返回 0。 |
官网地址:http://www.open-ble.org/ |
|
|
DA14580_DK/AK开发板系列 |
open-ble.org |
1.2.4 P00模式寄存器 |
15:10位:保留不使用; |
9:8位:设置引脚的上拉、下拉电阻的模式,00为输入,无电阻;01为输入, 上拉电阻;10为输入,下拉电阻;11为输出,无电阻;在 ADC模式中该位的设 置无效。 |
7:5位:保留不使用; |
4:0位:设置引脚功能,0~25分别对应不同的功能,具体看上图,注:当一 个输入功能设置为多个引脚时,引脚序号越低优先级越高,即优先选用序号低的 引脚设置为该功能。P0的优先级比 P1的高。 1.2.5 P1~P3的寄存器配置 参照P0寄存器的配置,需要注意的是P14与P15两个引脚模式的默认值是1, 即默认上拉电阻。 注:P14与 P15为 SWD调试接口的时钟与数据接口,在使用 Jlink调试过程 中不要使用这两个引脚。 1.3寄存器配置讲解 |
#define P0_DATA_REG #define P0_SET_DATA_REG #define P0_RESET_DATA_REG |
(* ( volatile uint16*)0x50003000) (* ( volatile uint16*)0x50003002) (* ( volatile uint16*)0x50003004) |
官网地址:http://www.open-ble.org/ |
|
|
DA14580_DK/AK开发板系列 |
open-ble.org |
#define P00_MODE_REG #define P01_MODE_REG #define P02_MODE_REG #define P03_MODE_REG #define P04_MODE_REG #define P05_MODE_REG #define P06_MODE_REG #define P07_MODE_REG |
(* ( volatile uint16*)0x50003006) (* ( volatile uint16*)0x50003008) (* ( volatile uint16*)0x5000300A) (* ( volatile uint16*)0x5000300C) (* ( volatile uint16*)0x5000300E) (* ( volatile uint16*)0x50003010) (* ( volatile uint16*)0x50003012) (* ( volatile uint16*)0x50003014) |
如果对P0整体操作,可以使用P0_DATA_REG寄存器,若使 P0[7:0] = 0xaa,因 为以上宏定义是定义的地址,则寄存器操作为 P0_DATA_REG=0xaa; 如果要读取 P0的状态值,则通过读取 P0_DATA_REG寄存器, P0_STATUS = P0_DATA_REG,若要读取某一位的状态值,则通过与操作之后返回逻辑值即可。 作为输出时P0_DATA_REG适合对整体P0口操作,而对于某一位进行操作则需 要经过一些逻辑操作保持其它位的值不变,不是很方便。而 P0_SET_DATA_REG 和P0_RESET_DATA_REG这两个寄存器对位操作就十分方便。对某一位置’0’或置’1’ 只需对应位赋1,其它位赋0即可,因为该寄存器忽视写0操作。若使 P00 = 1, P01 = 0则P0_SET_DATA_REG =0x01; P0_RESET _DATA_REG=0x02; P0[x]_MODE_REG是 P0口某一位的操作模式的设置寄存器,例如配置 P00为 输入口,不上拉电阻,P01为 I2C_SDA,P02为输出口,则 |
P00_ MODE _DATA_REG=0x00; P01_ MODE _DATA_REG=0x0a; P02_ MODE _DATA_REG=0x30; |
官网地址:http://www.open-ble.org/ |
|
|
DA14580_DK/AK开发板系列 |
open-ble.org |
第二节 Timer |
2.1 Timer介绍 软件定时器模块包含两个定时器模块,它们可以通过软件控制、编程并用于 |
各种任务。 2.1.1 Timer0 定时器0有 16位的通用定时器;可以产生两路脉宽调制信号;可编程的输 出频率;可编程的占空比;可编程的软件中断。 2.1.2 Timer2 定时器2有 14位的通用定时器;可以产生 3路脉宽调制信号;输入时钟频 率为16MHz;可编程的输入频率;占空比可调;用于白色LED的亮度控制。 |
2.2寄存器介绍 2.2.1定时器 0控制寄存器 |
15:4位:保留不使用; |
3位:PWM模式选择,’0’表示 PWM信号为高时输出’1’,’1’表示PWM信号 为高时输出快时钟信号的二分频,则输出频率范围为1~8MHz; 2位:定时器 0的时钟分频,为’1’使用选择的时钟源频率,为’0’使用选择的 时钟源进行10分频,注意这个值适用于计数寄存器; 1位:时钟源选择,’1’使用快时钟(16、8、4、2MHz),’0’使用慢时钟(32KHz); 0位:定时器 0控制位,’0’表示定时器 0关闭并处于复位状态,’1’定时器 0 运行。 |
2.2.2定时器 0计数控制寄存器 |
定时器0计数重新装载值,如果读取该寄存器则返回当前计数器的值。 2.2.3定时器 0高电平重新装载值 |
官网地址:http://www.open-ble.org/ |
|
|
DA14580_DK/AK开发板系列 |
open-ble.org |
定时器0高电平重新装载值,如果读取该寄存器则返回定时器0的计数值。 2.2.4定时器 0低电平重新装载值 |
定时器0低电平重新装载值,如果读取该寄存器则返回定时器0的计数值。 2.2.5 PWM2占空比 |
PWM2信号的占空比。 2.2.6 PWM3占空比 |
PWM3信号的占空比。 2.2.7 PWM4占空比 |
PWM4信号的占空比。 2.2.8 PWM2,3,4的频率 |
PWM2、3、4信号的频率,三个信号频率相同。 2.2.9 PWM2,3,4控制寄存器 |
2位:硬件暂停使能,为’1’则硬件可以停止 PWM2、3、4。 1位:软件暂停使能,为’1’则 PWM2、3、4暂停。 0位:PWM信号使能,为’1’则 PWM2、3、4使能。 |
2.3寄存器配置讲解 |
#define CLK_PER_REG #define TIMER0_CTRL_REG #define TIMER0_ON_REG #define TIMER0_RELOAD_M_REG #define TIMER0_RELOAD_N_REG |
(* ( volatile uint16*)0x50000004) (* ( volatile uint16*)0x50003400) (* ( volatile uint16*)0x50003402) (* ( volatile uint16*)0x50003404) (* ( volatile uint16*)0x50003406) |
官网地址:http://www.open-ble.org/ |
|
|
DA14580_DK/AK开发板系列 |
open-ble.org |
#define PWM2_DUTY_CYCLE |
(* ( volatile uint16*)0x50003408) (* ( volatile uint16*)0x5000340A) (* ( volatile uint16*)0x5000340C) (* ( volatile uint16*)0x5000340E) (* ( volatile uint16*)0x50003410) |
#define PWM3_DUTY_CYCLE #define PWM4_DUTY_CYCLE #define TRIPLE_PWM_FREQUENCY #define TRIPLE_PWM_CTRL_REG |
启动Timer0模块的时钟:CLK_PER_REG |= 0x0008; 定时器 0初始化,选择高频时钟,正常 PWM模式,无分频,则 TIMER0_CTRL_REG = 0X0E; 设置计数值为1000,高电平为500,低电平为200,则 TIMER0_ON_REG=1000; TIMER0_RELOAD_M_REG=500; TIMER0_RELOAD_N_REG=200; |
开 |
定 |
时 |
器 |
中 |
断 |
NVIC_SetPriority |
(SDA14580_DK/AKIM_IRQn, |
254); |
NVIC_EnableIRQ(SDA14580_DK/AKIM_IRQn); 启动定时器TIMER0_CTRL_REG = (TIMER0_CTRL_REG|0x01); |
官网地址:http://www.open-ble.org/ |
|
|
DA14580_DK/AK开发板系列 |
open-ble.org |
第三节 ADC |
3.1 GPADC介绍 DA14580集成一个高速超低功耗的 10位通用模数转换器。可以工作于单端 模式也可以工作于差分模式。ADC模块有一个 1.2V的电压校准器,作为满量程 的参考电压。 该ADC模块是 10位动态模数转换,转换时间为65ns;最大的采样率为 3.3MHz; 超低功耗(在100KHz的采样速率下典型供电电流为 5uA);有单端与差分两个输 入比例;有4个单端或者2个差分输入通道;电池检测功能;斩波器功能;偏移 和零刻度调整;公共端模式输入电平调整。 |
3.2寄存器介绍 3.2.1 ADC控制寄存器 |
官网地址:http://www.open-ble.org/ |
|
|
DA14580_DK/AK开发板系列 |
open-ble.org |
15位:使 LDO输出为0V; 14位:打开 LDO; 13位:通过相反的 ADC符号获取两个采样值来取消内部的偏置电压,强烈 建议用于DC的测量; |
12位:在中间刻度采样。 |
11位:ADC模式选择,’0’为差分模式,’1’为单端模式; 10位:’0’表示默认模式,’1’表示输入和输出的相反信号来取消内部的偏置与 低频; 9:6位:ADC输入选择,这个设置必须在 GP_ADC_START位使能之前。如果 GP_ADC_SE=1即为单端模式,则 0000表示选择P00引脚,其余见上图,没有在 上图中出现的组合值时被忽略的。如果GP_ADC_SE=0即为差分模式,则0000表 示P00与p01,其他任意组合表示P02与 P03。 5位:ADC中断控制,’0’关闭 ADC中断,’1’使能 ADC中断; 4位:ADC中断标志位,’1’表示模数转换准备好并且已经产生一个中断,在 写任何值到GP_ADC_CLEAR_INT_REG之前必须被清除; 3位:ADC时钟选择,’0’表示使用内部高速 ADC时钟,’1’表示使用数字时钟; 2位:保留不使用,保持 0; |
1位:’0’表示 ADC转换准备好,’1’表示开始一次转换,在转换之后该位被清 零,产生ADC中断; 0位:’0’表示关闭 ADC并处于复位状态,’1’表示使能ADC并开始采样。 |
3.2.2 ADC第二控制寄存器 |
15:4位:保留不使用; |
3位:对 LDO增加20uA的常量负载电流使 ADC参考电压的纹波最小; 2位:使能 LDO的动态负载电流使ADC参考电压的纹波最小; 1位:输入电压值,’0’表示输入电压最大 1.2V,’1’表示输入电压通过3倍衰 减最大3.6V; 0位:使能几个信号的延时功能。 3.2.3 ADC正偏移寄存器 |
15:10位:保留不使用; |
官网地址:http://www.open-ble.org/ |
|
|
DA14580_DK/AK开发板系列 |
open-ble.org |
9:0位:正值偏移调整。 3.2.4 ADC负偏移寄存器 |
15:10位:保留不使用; 9:0位:负值偏移调整。 3.2.5 ADC清除中断寄存器 |
15:0位:写任何值到该寄存器,清除 ADC中断,读取则返回0。 3.2.6 ADC结果寄存器 |
15:10位:保留不使用; 9:0位:ADC转换结果。 3.2.7 ADC延时寄存器 |
15:8位:保留不使用; 7:0位:定义 LDO使能的延时值。 3.2.8 ADC第二延时寄存器 |
15:8位:定义 ADC开始的延时值,默认为17us; 7:0位:定义 ADC使能的延时值,默认为16us。 3.3寄存器配置讲解 |
#define GP_ADC_CTRL_REG |
(* ( volatile uint16*)0x50001500) |
官网地址:http://www.open-ble.org/ |
|
|
DA14580_DK/AK开发板系列 |
open-ble.org |
#define GP_ADC_CTRL2_REG |
(* ( volatile uint16*)0x50001502) (* ( volatile uint16*)0x50001504) (* ( volatile uint16*)0x50001506) (* ( volatile uint16*)0x50001508) (* ( volatile uint16*)0x5000150A) (* ( volatile uint16*)0x5000150C) (* ( volatile uint16*)0x5000150E) |
#define GP_ADC_OFFP_REG #define GP_ADC_OFFN_REG #define GP_ADC_CLEAR_INT_REG #define GP_ADC_RESULT_REG #define GP_ADC_DELAY_REG #define GP_ADC_DELAY2_REG ADC初始化寄存器配置: |
使能LDO,单端模式,默认符号,则GP_ADC_CTRL_REG =0x4800; 使能ADC,则GP_ADC_CTRL_REG =0x4801; 增加常量电流减少纹波,输入最大电压为 3.6V,允许信号延时,则 GP_ADC_CTRL2_REG =0x4800; 选择P01作为输入引脚,则GP_ADC_CTRL_REG =0x4841; 读取转换结果,先启动转换 GP_ADC_CTRL_REG |= 0x0002;等待转换完成 while(GP_ADC_CTRL_REG&0x0002);清除中断标志 GP_ADC_CLEAR_INT_REG=0;读 取结果adc_result =GP_ADC_RESULT_REG; |
官网地址:http://www.open-ble.org/ |
|
|
DA14580_DK/AK开发板系列 |
open-ble.org |
第四节中断 |
4.1中断介绍 |
芯片内部有嵌套中断向量控制器(NVIC,Nested Vectored Interrupt Controller), 支持24个中断,能够中断配置与处理异常代码。当发生一个中断请求时,自动 执行对应的中断函数,不需要软件确定异常向量。中断可以有4个不同的可编程 的优先级,NVIC自动处理嵌套中断。对于安全关键系统,有不可屏蔽中断(NMI, Non maskable interrupt)输入。 DA14580内部有一个键盘控制器,可以用于延时 GPIO信号进入的时间。可 以检测所有的I/O口的电平变化。当检测到信号时,可以产生中断(KEYBR_IRQ)。 同时,另外有5个中断(GPIOn_IRQ)可以被GPIO口触发。 |
4.2寄存器介绍 4.2.1 GPIO_IRQ0中断源选择寄存器 |
15:6位:保留不使用; 5:0位:中断源选择,1~32分别对应选择 P00~P37,其它值不选择任何引脚; |
官网地址:http://www.open-ble.org/ |
|
|
DA14580_DK/AK开发板系列 |
open-ble.org |
4.2.2 GPIO_IRQ1中断源选择寄存器 |
15:6位:保留不使用; 5:0位:中断源选择,1~32分别对应选择 P00~P37,其它值不选择任何引脚; 4.2.3 GPIO_IRQ2中断源选择寄存器 |
15:6位:保留不使用; 5:0位:中断源选择,1~32分别对应选择 P00~P37,其它值不选择任何引脚; 4.2.4 GPIO_IRQ3中断源选择寄存器 |
15:6位:保留不使用; 5:0位:中断源选择,1~32分别对应选择 P00~P37,其它值不选择任何引脚; 4.2.5 GPIO_IRQ4中断源选择寄存器 |
15:6位:保留不使用; 5:0位:中断源选择,1~32分别对应选择 P00~P37,其它值不选择任何引脚; 4.2.6 GPIO延时寄存器 |
15:14位:保留不使用; |
13位:使能键盘接口延时计数; 12位:使能 GPIO IRQ4延时计数; 11位:使能 GPIO IRQ3延时计数; |
官网地址:http://www.open-ble.org/ |
|
|
DA14580_DK/AK开发板系列 |
open-ble.org |
10位:使能 GPIO IRQ2延时计数; 9位:使能 GPIO IRQ1延时计数; 8位:使能 GPIO IRQ0延时计数; 7:6位:保留不使用; 5:0位:延时值,为 N毫秒。 4.2.7 GPIO中断复位寄存器 |
15:6位:保留不使用; |
5位:对该位写 1,则复位KBRD中断,读取返回0; 4位:对该位写 1,则复位GPIO4中断,读取返回0; 3位:对该位写 1,则复位GPIO3中断,读取返回0; 4位:对该位写 1,则复位GPIO2中断,读取返回0; 1位:对该位写 1,则复位GPIO1中断,读取返回0; 0位:对该位写 1,则复位GPIO0中断,读取返回0。 |
4.2.8 GPIO中断电平控制寄存器 |
15:14位:保留不使用; 12位:在复位 GPIO中断4时不需要等待按键释放,所以一个新的中断会立 刻产生; 11位:在复位 GPIO中断3时不需要等待按键释放,所以一个新的中断会立 |
官网地址:http://www.open-ble.org/ |
|
|
DA14580_DK/AK开发板系列 |
open-ble.org |
刻产生; 10位:在复位 GPIO中断2时不需要等待按键释放,所以一个新的中断会立 刻产生; 9位:在复位 GPIO中断 1时不需要等待按键释放,所以一个新的中断会立 刻产生; 8位:在复位 GPIO中断 0时不需要等待按键释放,所以一个新的中断会立 刻产生; 7:6位:保留不使用; |
4位:为 0则表示输入高电平产生GPIO中断 4,为1则表示输入低电平产生 |
GPIO中断 4; 3位:为 0则表示输入高电平产生GPIO中断 3,为1则表示输入低电平产生 GPIO中断 3; 2位:为 0则表示输入高电平产生GPIO中断 2,为1则表示输入低电平产生 GPIO中断 2; 1位:为 0则表示输入高电平产生GPIO中断 1,为1则表示输入低电平产生 GPIO中断 1; 0位:为 0则表示输入高电平产生GPIO中断 0,为1则表示输入低电平产生 GPIO中断 0; |
注:数据手册中该寄存器中没有标注13位和5位,可能是勘误。 4.2.9键盘中断源选择寄存器 0 |
15位:为 0则表示按键释放不产生中断,为1表示按键释放也产生中断; 14位:为 0则表示输入高电平产生KBRD中断,为 1则表示输入低电平产生 KBRD中断; 13:8位:当按键按下,在不等于 0的规定时间之后,自动产生重复按键中断, 为0则禁止定时器; 7位:使能 P07产生键盘中断; 6位:使能 P06产生键盘中断; 5位:使能 P05产生键盘中断; 4位:使能 P04产生键盘中断; |
3位:使能 P03产生键盘中断; 2位:使能 P02产生键盘中断; |
官网地址:http://www.open-ble.org/ |
|
|
DA14580_DK/AK开发板系列 |
open-ble.org |
1位:使能 P01产生键盘中断; 0位:使能 P00产生键盘中断。 4.2.10键盘中断源选择寄存器 1 |
15位:使能 P15产生键盘中断; 14位:使能 P14产生键盘中断; 13位:使能 P13产生键盘中断; 12位:使能 P12产生键盘中断; 11位:使能 P11产生键盘中断; 10位:使能 P10产生键盘中断; 9位:使能 P29产生键盘中断; 8位:使能 P28产生键盘中断。 7位:使能 P27产生键盘中断; 6位:使能 P26产生键盘中断; 5位:使能 P25产生键盘中断; 4位:使能 P24产生键盘中断; 3位:使能 P23产生键盘中断; 2位:使能 P22产生键盘中断; 1位:使能 P21产生键盘中断; 0位:使能 P20产生键盘中断。 |
4.2.11键盘中断源选择寄存器 2 |
官网地址:http://www.open-ble.org/ |
|
|
DA14580_DK/AK开发板系列 |
open-ble.org |
7位:使能 P37产生键盘中断; 6位:使能 P36产生键盘中断; 5位:使能 P35产生键盘中断; 4位:使能 P34产生键盘中断; 3位:使能 P33产生键盘中断; 2位:使能 P32产生键盘中断; 1位:使能 P31产生键盘中断; 0位:使能 P30产生键盘中断。 |
4.3寄存器配置讲解 |
#define GPIO_IRQ0_IN_SEL_REG #define GPIO_IRQ1_IN_SEL_REG #define GPIO_IRQ2_IN_SEL_REG #define GPIO_IRQ3_IN_SEL_REG #define GPIO_IRQ4_IN_SEL_REG #define GPIO_DEBOUNCE_REG #define GPIO_RESET_IRQ_REG #define GPIO_INT_LEVEL_CTRL_REG #define KBRD_IRQ_IN_SEL0_REG #define KBRD_IRQ_IN_SEL1_REG #define KBRD_IRQ_IN_SEL2_REG |
(* ( volatile uint16*) 0x50001400) (* ( volatile uint16*) 0x50001402) (* ( volatile uint16*) 0x50001404) (* ( volatile uint16*) 0x50001406) (* ( volatile uint16*) 0x50001408) (* ( volatile uint16*) 0x5000140C) (* ( volatile uint16*) 0x5000140E) (* ( volatile uint16*) 0x50001410) (* ( volatile uint16*) 0x50001412) (* ( volatile uint16*) 0x50001414) (* ( volatile uint16*) 0x50001416) |
例1:P02为 GPIO中断1的中断源,延时 20毫秒,高电平产生中断,等待 按键释放,如下所示: GPIO_IRQ1_IN_SEL_REG =0x0003; GPIO_DEBOUNCE_REG =0x0114; GPIO_INT_LEVEL_CTRL_REG =0x0202; GPIO中断 1配置完成,在GPIO中断 1的中断函数中需要复位中断,需要添 加语句GPIO_RESET_IRQ_REG =0x0002;这样才能进行下一次中断。 例2:P03,P12,P28为 KBRD中断源,低电平有效,释放不产生中断,不 重复触发中断,延时30毫秒,如下所示: KBRD_IRQ_IN_SEL0_REG =0x4008; KBRD_IRQ_IN_SEL1_REG =0x1100; |
GPIO_DEBOUNCE_REG =0x201e; 键盘中断配置完成,在键盘中断函数中需要复位中断,需要添加语句 GPIO_RESET_IRQ_REG =0x0020;这样才能进行下一次中断。 |
官网地址:http://www.open-ble.org/ |
|
|
DA14580_DK/AK开发板系列 |
open-ble.org |
第五节 I2C |
5.1 I2C介绍 I2C总线是一个为系统中电路通信提供支持的可编程控制总线,它是一个软 件定义的两线通信协议。 两线I2C串行接口包括一个串行数据线(SDA)和一个串行时钟线(SCL); 支持两种通信速率,标准模式(0~100Kb/s)和快速模式(小于等于400Kb/s); 时钟同步; 32字节的发送接收 FIFO; 主机发送与接收操作; 7或 10位地址,7或 10为混合格式发送; 块发送模式; |
默认从地址为0x055; |
官网地址:http://www.open-ble.org/ |
|
|
DA14580_DK/AK开发板系列 |
open-ble.org |
中断或者轮询操作模式; 可编程的数据线保持时间; 5.2寄存器介绍 I2C相关的寄存器比较多,所以我们只介绍常用的寄存器,其它的可以参考 官方数据手册AD14580_DS_v3.1.pdf,位于目录:..\DA14580_DK/AK开发板\硬件资料。 5.2.1 I2C控制寄存器 |
15:7位:保留不使用; |
6位:I2C从设备使能位,’0’表示从设备使能,’1’表示从设备不可用,该位不 一定要软件设置,但是要保证如果该位为’0’则该寄存器的第0位也为’0’; 5位:当作为主设备时,是否发送重启条件,’0’表示不可以,’1’表示可以; 4位:作为主设备时,决定以 7位地址还是 10位地址开始发送, ’0’表示 7 位地址,’1’表示10位地址; 3位:作为从设备时,决定以 7位地址还是 10位地址开始发送, ’0’表示 7 位地址,’1’表示10位地址; 2:1位:I2C通信速度选择,1表示标准速度(100Kbit/s),2表示快速(400Kbit/s); 0位:I2C主设备使能,’0’表示主设备不可用,’1’表示主设备使能,要保证如 果该位为’1’则该寄存器的第6位也为’1’; |
5.2.2 I2C目标地址寄存器 |
官网地址:http://www.open-ble.org/ |
|
|
DA14580_DK/AK开发板系列 |
open-ble.org |
15:12位:保留不使用; 11位:该位决定软件是否进行广播或者开始字节命令,’0’表示忽略第 10位 GC_OR_START并且正常使用 IC_TAR; |
10位:如果第 11位设置为’1’,则该位表示控制器是否进行广播或开始字节 命令,’0’表示发送广播地址,之后只能进行写操作,如果进行读操作则导致 TX_ABRT置位,控制器一直停留在广播模式,直到第 11位被清除,’1’表示发送 开始字节; 9:0位:这是主设备发送的目标地址,如果发送广播则该位被忽略, CPU只 需要写一次这些位;注意如果目标地址与从设备地址相同则存在回路,但是 FIFO 为主从共用,所以完全回路是可行的,只支持单方向的回路,一个主设备不能给 自己发送数据只能发送给从设备。 |
5.2.3 I2C接收发送数据缓存与命令寄存器 |
官网地址:http://www.open-ble.org/ |
|
|
DA14580_DK/AK开发板系列 |
open-ble.org |
15:9位:保留不使用; 8位:读写控制位,作为从设备时不能控制方向,只能作为主设备时使用,’0’ 表示写,’1’表示读; 7:0位:存储 I2C总线上发送或接收的数据,如果你正在操作该寄存器并 且要进行读操作则该位被忽略,如果你读该寄存器则该位存储的是接收到的数据。 |
5.2.4 I2C清除TX_ABRT中断 |
15:1位:保留不使用; |
0位:清除发送异常停止位,读该位则清除发送异常停止中断位,和发送 异常停止源寄存器位。同时发送FIFO从刷新/复位状态中释放出来,可以允许更 多写入。 5.2.5 I2C使能寄存器 |
官网地址:http://www.open-ble.org/ |
|
|
DA14580_DK/AK开发板系列 |
open-ble.org |
15:1位:保留不使用; 0位:控制器使能位; 5.2.6 I2C状态寄存器 |
15:7位:保留不使用; |
6位:判断从设备是否活动; 5位:判断主设备是否活动; 4位:判断接收 FIFO是否全满; 3位:判断接收 FIFO是否为空; |
官网地址:http://www.open-ble.org/ |
|
|
DA14580_DK/AK开发板系列 |
open-ble.org |
2位:判断发送 FIFO是否全满; 1位:判断发送 FIFO是否为空; 0位:判断 I2C模块是否活动。 |
5.2.7 I2C接收FIFO数目寄存器 |
15:6位:保留不使用; 5:0位:接收 FIFO可以接收多少字节。 5.2.8 I2C发送异常终止源寄存器 |
官网地址:http://www.open-ble.org/ |
|
|
DA14580_DK/AK开发板系列 |
open-ble.org |
15位:当主设备需要发送数据时,却进入读数据状态; 14位:当发送数据时,从设备丢失总线; 13位:当从设备要接收数据时,FIFO中已经有一些数据; 12位:失去仲裁; 11位:当主设备不可用时,用户进行主设备的操作; 10位:重启不可用,并且主设备在 10位地址模式下发送读命令; 9位:重启不可用,但是用户发送一个开始字节; 8位:重启不可用,但是用户试图在高速模式下发送数据; 7位:主设备已经发送了一个开始字节,并且开始字节被确认; 6位:主设备在高速模式下,并且被确认; 5位:主设备控制器广播之后进行读操作; 4位:主设备发送广播,但是没有从设备确认; 3位:只有主设备有效,主设备已经发送地址,并确认,但是发送数据得不 到确认信号; 2位:主设备使用 10位地址模式,10位地址的第二个字节没有被任何从设 |
备确认; 1位:主设备使用 10位地址模式,10位地址的第一个字节没有被任何从设 备确认; 0位:主设备使用 7位地址模式,但是没有被任何从设备确认。 |
5.3寄存器配置讲解 |
#define CLK_PER_REG |
(* ( volatile uint16*)0x50000004) |
官网地址:http://www.open-ble.org/ |
|
|
DA14580_DK/AK开发板系列 |
open-ble.org |
#define I2C_CON_REG #define I2C_TAR_REG #define I2C_DATA_CMD_REG #define I2C_CLR_TX_ABRT_REG #define I2C_ENABLE_REG #define I2C_STATUS_REG #define I2C_RXFLR_REG #define I2C_TX_ABRT_SOURCE_REG |
(* ( volatile uint16*)0x50001300) (* ( volatile uint16*)0x50001304) (* ( volatile uint16*)0x50001310) (* ( volatile uint16*)0x50001354) (* ( volatile uint16*)0x5000136C) (* ( volatile uint16*)0x50001370) (* ( volatile uint16*)0x50001378) (* ( volatile uint16*)0x50001380) |
启动I2C模块的时钟:CLK_PER_REG |= 0x0020; I2C的初始化寄存器配置: 先关闭I2C控制器, I2C_ENABLE_REG=0x00; 设置为主模式,关闭从模式,可以重复开始,速度设置为快速,地址为 7 位模式(0x0000000001100101), I2C_ CON _REG =0x0065; 设置目标设备地址为0x51,I2C_TAR_REG =0x51; |
打开I2C控制器, I2C_ENABLE_REG=0x01; |
等待控制器准备好,while( (I2C_STATUS_REG & 0x20) != 0 ); 读取地址为0x98处的一个字节,先发送地址 I2C_DATA_CMD_REG = 0x98;等 待发送完毕while((I2C_STATUS_REG&0x0002)==0);发送读指令 I2C_DATA_CMD_REG = 0x0100;等待发送完毕 while((I2C_STATUS_REG&0x0004)==0);之后等待数据接收 完毕while(I2C_RXFLR_REG == 0);读取接收缓冲区的数据即为接收数据 rx_data = I2C_DATA_CMD_REG; 向地址为0x98处写入一个字节0xaa,先发送地址I2C_DATA_CMD_REG = 0x98; 等待发送完毕while((I2C_STATUS_REG&0x0002)==0);发送数据 I2C_DATA_CMD_REG = 0xaa;等待发送完毕 while((I2C_STATUS_REG&0x0004)==0); |
官网地址:http://www.open-ble.org/ |
|
|
DA14580_DK/AK开发板系列 |
open-ble.org |
第六节 SPI+ |
6.1 SPI+介绍 这个接口支持SPI总线的一个子集。这个串行接口在主 /从模式可以发送和 接收8、16或 32位,并且在主模式可以发送 9位。SPI+接口有双向的 2×16位 字的FIFO,功能得到了增强。 该接口可以工作在主或从模式;有8、9、16、32位的操作方式;SPI控制器 的时钟达到16MHz,SPI时钟源可以通过编程进行 1、2、4、8分频;SPI的时钟 线达到8MHz;支持SPI的 0、1、2、3四种工作模式;SPI_DO的空闲电平可以 通过编程设置;可屏蔽的中断发生器;单向读和写模式降低总线负载。 |
6.2寄存器介绍 6.2.1 SPI控制寄存器 0 |
官网地址:http://www.open-ble.org/ |
|
|
DA14580_DK/AK开发板系列 |
open-ble.org |
15位:SPI_EN引脚是否有效,’0’表示无效,’1’表示有效; 14位:SPI中断使能位,’0’表示无效,’1’表示有效; 13位:’0’表示接收寄存器或 FIFO为空,’1’表示 SPI中断,数据已经被发 送或接收,该位必须通过软件写SPI_CLR_INT_REG清零; 12位:返回 SPI_DI引脚的状态值; 11位:‘0’表示发送 FIFO满,‘1’表示发送FIFO空; 10位:‘0’正常模式,‘1’使 SPIDO的值等于SPI_DO的值; 9位:‘0’正常操作,‘1’复位 SPI; |
8:7位:SPI数据格式; |
6位:SPI工作模式,‘0’为主设备,‘1’为从设备; 5位:当 SPI处于空闲模式或者当SPI_FORCE_DO=1时引脚 SPI_DO的值; 4:3位:SPI在主模式下的时钟频率选择; 2位:SPI时钟初始电平的高低,‘0’为低,‘1’为高; 1位:SPI时钟的相位选择,具体看 SPI的时序图;(SPI的资料) 0位:SPI的开关。 |
6.2.2 SPI接收/发送寄存器 0 |
15:0位:SPI发送或接收的数据,写操作是,存储发送的数据,读操作时, 为接收到的数据。 6.2.3 SPI接收/发送寄存器 1 |
15:0位:SPI发送或接收的数据,写操作是,存储发送的数据,读操作时, 为接收到的数据;为32位模式的高16位数据。 6.2.4 SPI清除中断寄存器 |
15:0位:写任意值到该寄存器清除 SPI的中断标志。 6.2.5 SPI控制寄存器 1 |
官网地址:http://www.open-ble.org/ |
|
|
DA14580_DK/AK开发板系列 |
open-ble.org |
15:5位:保留不使用; 4位:决定在 9位模式下的第一位的值; 3位:SPI忙标志位,‘0’表示 SPI空闲,‘1’表示 SPI忙; 2位:SPI优先级选择位,‘0’低优先级,‘1’高优先级; 1:0位:SPI_FIFO模式。 |
6.3寄存器配置讲解 |
#define CLK_PER_REG |
(* ( volatile uint16*)0x50000004) (* ( volatile uint16*)0x50001200) (* ( volatile uint16*)0x50001202) (* ( volatile uint16*)0x50001204) (* ( volatile uint16*)0x50001206) (* ( volatile uint16*)0x50001208) |
#define SPI_CTRL_REG #define SPI_RX_TX_REG0 #define SPI_RX_TX_REG1 #define SPI_CLEAR_INT_REG #define SPI_CTRL_REG1 |
启动SPI模块的时钟:CLK_PER_REG |= 0x0800; SPI的初始化配置寄存器: 先关闭SPI,SPI_CTRL_REG =0x8000; SPI配置为 8位模式,主模式,时钟空闲为低电平,相位模式0,关闭SPI中 断,时钟8分频(0x1000000000000000),则SPI_CTRL_REG =0x8000; 开SPI,SPI_CTRL_REG | =0x0001; 发送一个字节0x55,将数据填充进发送寄存器SPI_RX_TX_REG0 = 0x55;等待 发送寄存器为空 while(SPI_CTRL_REG&0x2000); |
接收一个字节,读取接收寄存器rx_data = SPI_RX_TX_REG; |
官网地址:http://www.open-ble.org/ |
|
|
DA14580_DK/AK开发板系列 |
open-ble.org |
第七节 UART |
7.1 UART介绍 |
这个UART符合工业标准16550,并且可以和外围设备串行通信。主设备(CPU) 通过APB总线将数据写进UART并且被转换成串行格式并且发送到目标设备。串 行数据也可以通过UART被接收存储之后,主设备读取接收的数据。 UART模块不支持 DMA,但是它有内部 FIFOs,并且支持硬件流控制信号 (RTS,CTS,DTR,DSR)。 UART模块有 16字节的发送和接收FIFO;支持硬件流控制(CTS/RTS);影子 寄存器来减少软件开销并且有可编程的软件复位;发送寄存器为空的中断模式; IrDA 1.0 SIR模式支持低功耗模式;可编程的字节属性、校验位和停止位(1,1.5,2); 可以断开通信及检测通信线是否断开;中断优先级的识别;可编程的串行通信波 特率。 |
7.2 UART寄存器 UART相关的寄存器比较多,所以我们只介绍常用的寄存器,其它的可以参 考官方数据手册DA14580_DS_v3.1.pdf,位于目录:..\DA14580_DK/AK开发板\硬件资料。 |
7.2.1接收缓冲寄存器 |
15:8位:保留不使用; |
官网地址:http://www.open-ble.org/ |
|
|
DA14580_DK/AK开发板系列 |
open-ble.org |
7:0位:接收缓存寄存器。 7.2.2中断使能寄存器 |
15:8位:保留不使用; 7位:发送空中断使能位; 6:4位:保留不使用; 3位:调制状态中断使能位; 2位:接收状态中断使能位; 1位:发送结束中断使能位; 0位:数据接收完使能位。 |
官网地址:http://www.open-ble.org/ |
|
|
DA14580_DK/AK开发板系列 |
open-ble.org |
7.2.3中断识别寄存器/FIFO控制寄存器 |
15:0位:写则为 FIFO控制寄存器,读则为中断识别寄存器。 |
官网地址:http://www.open-ble.org/ |
|
|
DA14580_DK/AK开发板系列 |
open-ble.org |
7.2.4通信线控制寄存器 |
15:8位:保留不使用; 7位:波特率使能位; 6位:停止控制位; 5位:保留不使用; 4位:奇偶校验选择位; 3位:校验位; 2位:停止位; 1:0位:数据长度。 7.2.5调制器控制寄存器 |
官网地址:http://www.open-ble.org/ |
|
|
DA14580_DK/AK开发板系列 |
open-ble.org |
15:7位:保留不使用; |
6位:红外通信使能位; 5位:自动流控制使能位; 4位:回路位,用于测试; 3位:用户指定输出 2; 2位:用户指定输出 1; |
官网地址:http://www.open-ble.org/ |
|
|
DA14580_DK/AK开发板系列 |
open-ble.org |
1位:发送请求; 0位:保留不使用。 7.2.6通信线状态寄存器 |
官网地址:http://www.open-ble.org/ |
|
|
DA14580_DK/AK开发板系列 |
open-ble.org |
15:8位:保留不使用; 7位:接收 FIFO错误位; 6位:发送器空位; |
官网地址:http://www.open-ble.org/ |
|
|
DA14580_DK/AK开发板系列 |
open-ble.org |
5位:发送保持寄存器空位; 4位:异常停止中断位; 3位:帧错误位; 2位:校验错误位; 1位:溢出错误位; 0位:数据准备好位。 |
7.3寄存器配置讲解 |
#define CLK_PER_REG |
(* ( volatile uint16*)0x50000004) (* ( volatile uint16*)0x50001000) (* ( volatile uint16*)0x50001004) (* ( volatile uint16*)0x50001008) (* ( volatile uint16*)0x5000100C) (* ( volatile uint16*)0x50001010) (* ( volatile uint16*)0x50001014) (* ( volatile uint16*)0x50001018) (* ( volatile uint16*)0x5000101C) |
#define UART_RBR_THR_DLL_REG #define UART_IER_DLH_REG #define UART_IIR_FCR_REG #define UART_LCR_REG #define UART_MCR_REG #define UART_LSR_REG #define UART_MSR_REG #define UART_SCR_REG |
启动UART1模块的时钟CLK_PER_REG |= 0x0080; 串口初始化寄存器配置: 首先使能波特率配置UART_LCR_REG = 0X08; 配置波特率UART_IER_DLH_REG = 0; UART_RBR_THR_DLL_REG = 9; 8位数据,无校验,1位停止位 UART_LCR_REG = 0X03; 关闭红外通信功能UART_MCR_REG = 0X00; 使能FIFO,UART_IIR_FCR_REG = 0X01; 关闭中断UART_IER_DLH_REG = 0X00; 接收一个字节,等待接收完成while((UART_LSR_REG&0x01)==0);读取接收数据 rx_data = UART_RBR_THR_DLL_REG; 发送一个字节0x55,等待发送为空 while((UART_LSR_REG&0x20)==0);填充发 送数据UART_RBR_THR_DLL_REG = 0xaa; |
官网地址:http://www.open-ble.org/ |
|
|