SC16IS752在ARM扩展串口中的应用
扫描二维码
随时随地手机看文章
嵌入式设备中串口是最常用、最简单的接口,如何扩展CPU的串口,对于多功能嵌入式设备有着重要意义。SC16IS752是NXP公司推出带I2C/SPI总线接口转双通道UART的转换芯片,可提供高达5Mbit/s的速率,兼容广泛使用的16C450,有利于软件的移植和编写。本文中微控制器采用NXP公司推出的LPC2214,基于16/32位ARM7TDMI-STM 的内核, 144脚封装,极低的功耗, 特别适用于工业控制等。
SC16IS752的主要特性如下:
●工作电压:3.3或2.5V, 工作温度范围:-40~+85°C,低功耗, 3.3V的睡眠电流小于30uA;
●两个全双工UART,64字节的FIFO,完全可编程的字符格式,RTS/CTS自动流控制;
●封装小, 和CPU连接简单,有HVQFN32和TSSOP28封装可选。
本文采用SPI来扩展CPU串口, SC16IS752设置为从模式,下面介绍其的硬件特性。
1.SC16IS752的引脚功能和寄存器
图一为SC16IS752的引脚排列,表一为各引脚的功能。
寄存器主要有发送寄存器(THR)、接收寄存器(RHR)、控制寄存器(FCR)、线控寄存器(LCR)、状态寄存器(MCR)、MODEM状态寄存器 (MSR)、中断使能寄存器(IER)、中断识别寄存器(IIR)、除数寄存器(DLH/DLL)、发送控制寄存器(TCR)、触发点寄存器(TLR)、 I/O脚控制寄存器等。
2.SC16IS752中SPI时序图
如下图所示:
3. SC16IS752与LPC2214接口电路图
图四为扩展串口的部分电路图。采用3线制的串口连线方式,用3.3V电源对SC16IS752供电,芯片封装选用TSSOP28,晶体采用 1.8432MHZ, 震荡电路由C3、 C4组成。SC16IS752硬件采用阻容复位,由R3、C2组成,也可采用微处理器的I/O口复位,笔者对两种方法在实际中都试验过。本文采用阻容复位,这样可节省I/O 口,SC16IS752的pin15脚接到LPC2214的INT3上,这样,既可以用中断方式编写软件,也可以用扫描的方式。R4为上拉电阻,确保电平可靠。CPU的SPI1为主模式,用一个I/O连到SC16IS752的SELL1,需要注意的是LPC2214的第60脚SELL1必须接高电平,用R5作上拉电阻。R1、R2是为LPC2214内部FLASH启动设置的。特别要注意 CPU的P0.14管脚的使用,FLASH boot装载程序代码是在CPU上电或复位时执行,器件复位时,当P0.14为低电平,启动ISP, 进行软件更改;当不需要ISP功能时,接上拉电阻R6,使P0.14处于一个稳定的状态。CPU复位限于篇幅,未给出。
4.电平转换
电平转换采用SIPEX公司的SP3232E芯片,该芯片满足EIA/TIA-232-标准。工作电压为+3.0V~5.5V, 另外,管脚提供了ESD保护。使得驱动器和接收器的管脚可承受±15KV人体放电模式和IEC1000-4-2气隙放电模式。如下图所示:
5.初始化寄存器
SC16IS752初始化寄存器的程序如下:
/*SC16IS752初始化*/
void init_is752(void) {
/*初始化SC16IS752第一个串口A.*/
write_is752_rega(IS752_CH_A,IS752_LCR,0xbf); write_is752_rega(IS752_CH_A,IS752_EFR,IS752_EFR_VAL);
write_is752_rega(IS752_CH_A,IS752_LCR,0x00);
/*设置SC16IS752 串口A 中断.*/
write_is752_rega(IS752_CH_A, IS752_IER, IS752_IER_VAL);
write_is752_rega(IS752_CH_A, IS752_FCR, IS752_FCR_VAL);
write_is752_rega(IS752_CH_A, IS752_MCR, IS752_MCR_VAL);
write_is752_rega(IS752_CH_A, IS752_EFCR, IS752_EFCR_VAL);
/*初始化SC16IS752第二个串口B,同串口A,略. 清寄存器程序,略*/
} /* 写数据 */
void write_is752_rega(unsigned char chx,unsigned char addr, unsigned char data){
unsigned char temp;
if((IS752_CH_A == chx) ||(IS752_CH_B == chx)){
CLR_IS752_CS;
temp = addr<<3;
temp |= chx;
spi_send_byte(SPI1,tmp);
spi_send_byte(SPI1,data); /*发送数据.*/
SET_IS752_CS;
}
}
/*读数据*/
unsigned char read_is752_rega(unsigned char chx, unsigned char addr){
unsigned char temp;
if((IS752_CH_A == chx) ||(IS752_CH_B == chx)){
CLR_IS752_CS;
temp = addr<<3;
temp |= 0x80|chx;
spi_send_byte(SPI1,temp);
spi_send_byte(SPI1,0xff);
SET_IS752_CS;
return(S1SPDR);
}
}
SPI程序接口在其他书籍中有详细介绍,在此不作描述(见参考文献1)。
5. 结语
市场上有很多串口扩展芯片,我们以前也用过并口来扩展串口,如16C552,16C554等。SC16IS752与它们相比,连接简单,功耗低,体积小,在实际应用中表现出很好的稳定性,已用于我们的设计的产品中。同时它体积小,功耗低,在手持设备中将有广阔的应用前景。
本文作者创新点: 1.只用CPU的5根口线就能扩展两个串口,节约了CPU的资源;
2.体积小,功耗低,在手持设备中将有广阔的应用前景;
3.连接简单,稳定性好。
参考文献
1. 周立功等.ARM嵌入式系统基础教程。北京:北京航空大学出版社.2005www
2. NXP公司SC16IS752 /SC15IS762 datasheet. Rev0.12-19 September 2005
3. 李春光等。嵌入式微处理器与FLASH闪存的接口设计实现,微计算机信息, (2006)07-2-0154-04