智能小车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.初始化串口
/*

* 初始化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;

}

文/中中 浏览次数:0次   2017-10-17 10:38:56

相关阅读


评论: