微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > 射频无线通信设计 > DA14580 LED blink ---------DA14580的IO控制。

DA14580 LED blink ---------DA14580的IO控制。

时间:10-02 整理:3721RD 点击:


首先要有个感性认识,
打开DA14580的blinky_arrived例程,

[C] 纯文本查看 复制代码

/** **************************************************************************************** * [url=home.php?mod=space&uid=159083]@brief[/url] Main routine of the UART example * **************************************************************************************** */int main (void){ system_init(); periph_init(); blinky_test(); while(1);}



因为仅是一个IO口及UART工作,所以,代码很简单。

将它编译,运行,并打开串口工具,



1、IO的控制 ---------system_init

[C] 纯文本查看 复制代码

/** **************************************************************************************** * @brief System Initiialization * * **************************************************************************************** */void system_init(void){ SetWord16(CLK_AMBA_REG, 0x00); // set clocks (hclk and pclk ) 16MHz SetWord16(SET_FREEZE_REG,FRZ_WDOG); // stop watch dog SetBits16(SYS_CTRL_REG,PAD_LATCH_EN,1); // open pads SetBits16(SYS_CTRL_REG,DEBUGGER_ENABLE,1); // open debugger SetBits16(PMU_CTRL_REG, PERIPH_SLEEP,0); // exit peripheral power down}



程序中,SetWord16是对寄存器直接写入的宏。第一个参数为寄存器的直接地址,第二个参数为要写入的值,

Dialog常用这种办法,实现对芯片的设置的。
在它的头文件datasheet.h中,可以看到,给出了每个寄存器的地址定义,对于需要对每个位控制的寄存器,也提供了相应的结构,如:

[C] 纯文本查看 复制代码

/*=============================*/struct __CLK_PER_REG/*=============================*/{ WORD BITFLD_TMR_DIV : 2; WORD : 1; WORD BITFLD_TMR_ENABLE : 1; WORD BITFLD_WAKEUPCT_ENABLE : 1; WORD BITFLD_I2C_ENABLE : 1; WORD BITFLD_UART2_ENABLE : 1; WORD BITFLD_UART1_ENABLE : 1; WORD BITFLD_SPI_DIV : 2; WORD : 1; WORD BITFLD_SPI_ENABLE : 1; WORD : 2; WORD BITFLD_QUAD_ENABLE : 1;};


2、blinky_test函数

[C] 纯文本查看 复制代码

/** **************************************************************************************** * @brief Blinky test fucntion * * **************************************************************************************** */void blinky_test(void){ int i=0; // Select function of the port P1.0 to pilot the LED printf_string("\n\r\n\r"); printf_string("***************\n\r"); printf_string("* BLINKY DEMO *\n\r"); printf_string("***************\n\r"); while(1) { i++; if (LED_OFF_THRESHOLD == i) { GPIO_SetActive( LED_PORT, LED_PIN); printf_string("\n\r *LED ON* "); } if (LED_ON_THRESHOLD == i) { GPIO_SetInactive(LED_PORT, LED_PIN); printf_string("\n\r *LED OFF* "); }				if (i== 2*LED_ON_THRESHOLD){					i=0;				} }}



此函数使用了两个控制IO状态的函数:
GPIO_SetActive
GPIO_SetInactive
其关键的也是使用SetWord16宏来对寄存器控制,但多了个端口的凑数。

不错,有用。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top