开源蓝牙ble-1_DA14580初级入门教程3_DA1458x软件基础教程

 

软件基础教程

——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组,分别为 Port0Port1

Port2Port3,其中Port2只在 QFN40QFN48封装的芯片中,Port3只在   QFN48

封装的芯片中。

Port08个引脚,Port16个引脚(其中包括DEBUG引脚SW_CLKSWDIO),

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寄存器的配置,需要注意的是P14P15两个引脚模式的默认值是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 = 0P0_SET_DATA_REG =0x01;  P0_RESET _DATA_REG=0x02;

P0[x]_MODE_REG P0口某一位的操作模式的设置寄存器,例如配置  P00

输入口,不上拉电阻,P01 I2C_SDAP02为输出口,则

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’使用快时钟(16842MHz),’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的频率

PWM234信号的频率,三个信号频率相同。

2.2.9 PWM2,3,4控制寄存器

2位:硬件暂停使能,为’1’则硬件可以停止 PWM234

1位:软件暂停使能,为’1’ PWM234暂停。

0位:PWM信号使能,为’1’ PWM234使能。

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

P00p01,其他任意组合表示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中断介绍

芯片内部有嵌套中断向量控制器(NVICNested 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)

1P02 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;这样才能进行下一次中断。

2P03P12P28 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

设置目标设备地址为0x51I2C_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总线的一个子集。这个串行接口在主 /从模式可以发送和

接收816 32位,并且在主模式可以发送 9位。SPI+接口有双向的 2×16

字的FIFO,功能得到了增强。

该接口可以工作在主或从模式;有891632位的操作方式;SPI控制器

的时钟达到16MHzSPI时钟源可以通过编程进行 1248分频;SPI的时钟

线达到8MHz;支持SPI 0123四种工作模式;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的初始化配置寄存器:

先关闭SPISPI_CTRL_REG =0x8000

SPI配置为 8位模式,主模式,时钟空闲为低电平,相位模式0,关闭SPI

断,时钟8分频(0x1000000000000000),则SPI_CTRL_REG =0x8000

SPISPI_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;

使能FIFOUART_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/

 

 

 

 

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值