智能小车38:晶振原理与串口的使用
一、振荡器的电气原理
能够产生振荡电流的电路叫做振荡电路。一般由电阻、电感、电容等元件和电子器件所组成。由电感线圈l和电容器c相连而成的lc电路是最简单的一种振荡电路,其固有频率为f=[sx(]1[]2πlc。 如下图:
图里的的电容充放电时间决定了振荡器的频率,这个频率就就是我们电器里的时钟。晶振就是石英材质的振荡器。上面只是原理图,而实际的电路原理图如下:
从原理图里可以看出主要是由Cb这个电容的充放电来控制Vt这个三极管来实现振荡的。
二、Arm中的时钟
arm中有以下三种时钟频率,分别对应三类电子元件。
FCLK:CPU:200MHz/400MHz
HCLK:SDRAM 100MHz
PCLK:UART(串口) 50MHz
系统启动时只有一个12MHz的晶振在起振,要把12MHz转为上面的三类时钟频率,需要使用PLL(Phase Locked Loop)。而它是先把12MHz转为400MHz,再把400MHz分频分成100MHz与50MHz。这个电路更复杂,我还不懂,先使用吧。
初始化时钟代码:
其中CLKDIVN是设置锁定时间,这个设置了才能让12MHz转为200MHz。中间的汇编代码是在FCLK与PCLK不一致时,开发板需要这么设置,在2440开发板中可以查到。注释中给了MPLLCON的计算公式。
三、如何使用串口
打开SecureCRT连接串口,可以查到连接串口需设置以下几个参数:
这与Arduino的设置也是对应的。Arm里代码如何实现呢?
1.初始化串口
2.接收字符
3.放送字符
文/程忠 浏览次数:0次 2017-10-17 10:38:56
能够产生振荡电流的电路叫做振荡电路。一般由电阻、电感、电容等元件和电子器件所组成。由电感线圈l和电容器c相连而成的lc电路是最简单的一种振荡电路,其固有频率为f=[sx(]1[]2πlc。 如下图:
图里的的电容充放电时间决定了振荡器的频率,这个频率就就是我们电器里的时钟。晶振就是石英材质的振荡器。上面只是原理图,而实际的电路原理图如下:
从原理图里可以看出主要是由Cb这个电容的充放电来控制Vt这个三极管来实现振荡的。
二、Arm中的时钟
arm中有以下三种时钟频率,分别对应三类电子元件。
FCLK:CPU:200MHz/400MHz
HCLK:SDRAM 100MHz
PCLK:UART(串口) 50MHz
系统启动时只有一个12MHz的晶振在起振,要把12MHz转为上面的三类时钟频率,需要使用PLL(Phase Locked Loop)。而它是先把12MHz转为400MHz,再把400MHz分频分成100MHz与50MHz。这个电路更复杂,我还不懂,先使用吧。
初始化时钟代码:
其中CLKDIVN是设置锁定时间,这个设置了才能让12MHz转为200MHz。中间的汇编代码是在FCLK与PCLK不一致时,开发板需要这么设置,在2440开发板中可以查到。注释中给了MPLLCON的计算公式。
三、如何使用串口
打开SecureCRT连接串口,可以查到连接串口需设置以下几个参数:
这与Arduino的设置也是对应的。Arm里代码如何实现呢?
1.初始化串口
/* * 初始化UART0 * 115200,8N1,无流控 */ void uart0_init(void) { GPHCON |= 0xa0; // GPH2,GPH3用作TXD0,RXD0 GPHUP = 0x0c; // GPH2,GPH3内部上拉 ULCON0 = 0x03; // 8N1(8个数据位,无较验,1个停止位) UCON0 = 0x05; // 查询方式,UART时钟源为PCLK UFCON0 = 0x00; // 不使用FIFO UMCON0 = 0x00; // 不使用流控 UBRDIV0 = UART_BRD; // 波特率为115200 }
2.接收字符
unsigned char getc(void) { /* 等待,直到接收缓冲区中的有数据 */ while (!(UTRSTAT0 & RXD0READY)); /* 直接读取URXH0寄存器,即可获得接收到的数据 */ return URXH0; } //其中UTRSTAT0 是状态寄存器
3.放送字符
void putc(unsigned char c) { /* 等待,直到发送缓冲区中的数据已经全部发送出去 */ while (!(UTRSTAT0 & TXD0READY)); /* 向UTXH0寄存器中写入数据,UART即自动将它发送出去 */ UTXH0 = c; }
相关阅读
评论:
↓ 广告开始-头部带绿为生活 ↓
↑ 广告结束-尾部支持多点击 ↑