华邦710串口初始化例子
首先不要被英文datasheet吓倒,其次要有一定的嵌入式开发基础知识为基础,这样开发最快。慢慢的看慢慢的研究我们的英文水平足够了,拿华邦的w90p710芯片来给你举个例子吧。一般初始化一个接口驱动都遵守从大到小的原则,大就是先考察你用的板子的该驱动有没有和别人共用的寄存器?需要gpio初始化么?需要打开时钟?这些全局都设置正确了才能下一步研究该接口具体的个性,比如说设置波特率了么?需要开启中断使能么?此外串口肯定要设置停止位什么的吧,然后再慢慢的动手调试。此外你最好要对你所写的驱动有所了解,比如写串口驱动,那么串口的原理你应该大致了解吧,不了解就算写出来也不算会写驱动了,呵呵,我自己这么认为。希望批评指正。
void CONSOL_Init(int wBaud)
{
Multi_setreg=0x15555555;//这个是多功能寄存器设置,就是某些资源串口和别人共用,我们需要切回供串口使用
REG_COM_FCR=TX_RX_FIFO_RESET;//reset fifo//reset fifo,清除tx和rx的fifo缓存,初始化的时候设置成0就是了
_mBaudValue = (CONFIG_W90P710_CLOCK / (wBaud * 16));
if ((CONFIG_W90P710_CLOCK % (wBaud * 16)) > ((wBaud * 16) / 2))
_mBaudValue++;
_mBaudValue -= 2;
REG_COM_LCR=ENABLE_DLAB;//这句是因为华邦的串口寄存器的地址值相互共用,切回访问
UART_DLL和UART_DLM :以供设置波特率。如下图及蓝色代码部分。
Register
| Offset
| R/W
| Description
| Reset Value
| UART_RBR
| 0x00
| R
|
Receive Buffer Register (DLAB = 0)
| Undefined
| UART_THR
| 0x00
| W
|
Transmit Holding Register (DLAB = 0)
| Undefined
| UART_IER
| 0x04
| R/W
|
Interrupt Enable Register
(DLAB = 0)
| 0x0000_0000
| UART_DLL
| 0x00
| R/W
|
Divisor Latch Register (LS)
(DLAB = 1)
| 0x0000_0000
| UART_DLM
| 0x04
| R/W
|
Divisor Latch Register (MS)
(DLAB = 1)
| 0x0000_0000
|
REG_COM_LSB=(unsigned char)_mBaudValue;
REG_COM_MSB=(unsigned char)(_mBaudValue >> 8);//蓝色部分代码是设置串口波特率。
REG_COM_LCR=REG_COM_LCR& DISABLE_DLAB;//切回访问其他寄存器,因为lsb和msb寄存器设置一次就没用了。
REG_COM_LCR=(WB_PARITY_NONE | WB_DATA_BITS_8 | WB_STOP_BITS_1);//设置奇偶校验停止位等等吧。
REG_COM_TOR=ENABLE_TIME_OUT;//Time Out Register使能timeout
REG_COM_FCR=LEVEL_1_BYTE;//见下图,我们设置trigger lev为1字节,就是说接受一字节马上发生中断,这样省事但是中断发生频繁,有力有弊:
RX FIFO Interrupt (Irpt_RDA) Trigger Level
RFITL [7:6]
| Irpt_RDA Trigger Level (Bytes)
| 00
| 01
| 01
| 04
| 10
| 08
| 11
| 14 |
|