智能小车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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值