NEC V850 之 串口通信(UART4)

发布者:liliukan最新更新时间:2016-10-07 来源: eefocus关键字:NEC  V850  串口通信 手机看文章 扫描二维码
随时随地手机看文章
搞一个芯片如果不搞串口总是感觉缺点什么,这段时间搞v850系列的32位MCU,基本程序差不多就到串口就截至了,下面就是要弄CAN和系统了。

这次的串口的程序还是把接收的字符再发送出去。之前先说明几点

  1. 系统时钟,设置系统时钟输出脚输出,方便测量目前的系统时钟,有了准确的时钟才能计算波特率等信息。
  2. 波特率计算方式,根据寄存器UDnCTL1和UDnCTL2来计算,见下图
NEC V850 之 串口通信(UART4) - 豆子 - 代码豆子

        举个例子:如果串口的总线时钟和系统时钟一致为32MHz,我们需要115200bps的波特率,下面算出UDnCTL2寄存器的值(即K值),可以得到一个方程为115200bps  =   32MHz  /  2*k  ,可以求的 k = 138.888 ,取值138或者139。可见通信是有误差的。只要是误差量足够小就不足为虑,不要进行连续的大数据传输问题就不会很大。下面来计算下误差率,如果取值为138的话,则通信波特率可以由   32MHz  /   (2*138)  = 115942.0289855072 bps ,误差率为((115942.02899 / 115200) - 1)* 100 = 0.644%。

 


 

下面是代码部分了

  • 串口接收中断屏蔽寄存器         UD4RIC
  • 串口控制寄存器0                     UD4CTL0
  • 串口控制寄存器1                     UD4CTL1
  • 串口控制寄存器2                     UD4CTL2
  • 时钟选择控制寄存器3              SELCNT3 --  ISEL34
  • 串口状态寄存器                       UD4STR   --  UD4TSF
  • 串口发送数据寄存器                UD4TX
  • 串口接收数据寄存器                UD4RX

程序上操作:串口初始化,串口使能,串口禁止,串口查询发送一个字符,串口中断接收一个字符。

  • 串口初始化
    1. 禁止串口发送,接受及运行;
    2. 关闭接收中断,清接收中断标志;
    3. 设置中断优先级;
    4. 设置串口波特率;
    5. 设置串口时钟;
    6. 设置串口数据帧属性;
    7. 设置串口RXD,TXD端口属性。                         
  • 串口使能
    1. 使能串口接收中断,清接收中断标志位;
    2. 使能串口发送,接收及运行标志位。
  • 串口禁止
    1. 禁止串口发送,接收及运行;
    2. 禁止串口的三种中断源。
  • 串口查询发送一个字符
  • 串口中断接收一个字符

下面是具体的代码了。


代码出处:main.c

#include
#include
#include "system.h"
#include "Uart.h"

void main( void )
{
SystemClkInit(); // 初始化系统时钟为32MHz

/* CLKOUT pin set */
PMCCM |= 0x02; // 设置系统时钟输出引脚使能,输出值为系统时钟(32MHz)

__DI(); // 关闭总中断
UARTD4_Init(); // 初始化串口4
__EI(); // 打开总中断

UARTD4_Start(); // 使能串口4应用
while (1)
{;}
}



代码出处:Uart.c

#include "Uart.h"

/*******************************************************************************
* Function Name : UARTD4_Init
* Description : 串口4初始化
* Input : None
* Output : None
* Return : None
*******************************************************************************/
void UARTD4_Init( void )
{
UD4TXE = 0; /* disable transmission operation(uartd4) */
UD4RXE = 0; /* disable reception operation(uartd4) */
UD4PWR = 0; /* disable UARTD4 operation */

UD4RMK = 1; /* INTUD4R interrupt disable */
UD4RIF = 0; /* clear INTUD4R interrupt flag */

UD4RIC |= 0x07; // 设置接受中断优先级为最低优先级

UD4CTL1 = UARTD_BASECLK_FXP1_1; // 设置串口4的时钟为系统时钟32MHz,不分频
UD4CTL2 = 138; // 设置波特率为 115200 bps,计算公式见datasheet 573页
ISEL34 = 0; // 设置串口4的时钟选择为fXP1,见datasheet 220页
UD4CTL0 = UARTD_TRANSFDIR_LSB | UARTD_PARITY_NONE | UARTD_DATALENGTH_8BIT | UARTD_STOPLENGTH_1BIT;
// 设置数据帧格式为 从低位开始,无奇偶效验位,8位数据位,1位停止位
/* UARTD4 TXDD4(P915) pin set */ // 设置端口为第二功能模式,配置关系见datasheet 138页
PFC9H_bit.no7 = 1;
PFCE9H_bit.no7 = 1;
PMC9H_bit.no7 = 1;
/* UARTD4 RXDD4(P914) pin set */
PFC9H_bit.no6 = 1;
PFCE9H_bit.no6 = 1;
PMC9H_bit.no6 = 1;
}

/*******************************************************************************
* Function Name : UARTD4_Start
* Description : 串口4使能
* Input : None
* Output : None
* Return : None
*******************************************************************************/
void UARTD4_Start( void )
{
UD4RIF = 0; /* clear INTUD4R interrupt flag */
UD4RMK = 0; /* INTUD4R interrupt enable */

UD4PWR = 1; /* enable UARTD4 operation */
UD4TXE = 1; /* enable transmission operation(uartd4) */
UD4RXE = 1; /* enable reception operation(uartd4) */
}

/*******************************************************************************
* Function Name : UARTD4_Stop
* Description : 串口4禁止
* Input : None
* Output : None
* Return : None
*******************************************************************************/
void UARTD4_Stop( void )
{
UD4TXE = 0; /* disable transmission operation(uartd4) */
UD4RXE = 0; /* disable reception operation(uartd4) */
UD4PWR = 0; /* disable UARTD4 operation */

// 关闭3个中断源
UD4TMK = 1; /* INTUD4T interrupt disable */
UD4TIF = 0; /* clear INTUD4T interrupt flag */
UD4RMK = 1; /* INTUD4R interrupt disable */
UD4RIF = 0; /* clear INTUD4R interrupt flag */
UD4SMK = 1; /* INTUD4S interrupt disable */
UD4SIF = 0; /* clear INTUD4S interrupt flag */
}

/*******************************************************************************
* Function Name : UART4_SendChar
* Description : 串口4发送一个字符
* Input : 要发送的字符
* Output : None
* Return : None
*******************************************************************************/
void UART4_SendChar(unsigned char word)
{
if((UD4STR & 0x80) == 0)
{
UD4TX = word;
}
UD4TIF = 0; // 使用的是查询方式发送串口数据,但是相应标识为会置位,这里为了保存代码完整性
}

/*******************************************************************************
* Function Name : MD_INTUD4R
* Description : 接收中断服务函数
* Input : None
* Output : None
* Return : None
*******************************************************************************/
#pragma vector = INTUD4R_vector
__interrupt void MD_INTUD4R(void)
{
volatile unsigned char rx_data;

rx_data = UD4RX;
UART4_SendChar(rx_data);

UD4RIF = 0; // 串口接收来中断并没有置位寄存器,这里为了保持代码完整性
}



串口是难度并不很大,实验是可以成功的,但是最后还有2个问题没有搞清楚,一个是来接收中断的时候,相应的UD4RIF标志位没有置位,始终是低电平,还有就是查询发送的时候,发送中断使能是关闭的但是以发送完毕,对应的UD4TIF标志位就会置位。但是这两点都不影响串口的操作,不知道瑞萨是怎么考虑的,见下图:

NEC V850 之 串口通信(UART4) - 豆子 - 代码豆子
NEC V850 之 串口通信(UART4) - 豆子 - 代码豆子
 
如果有知晓答案的朋友,请不吝赐教!

关键字:NEC  V850  串口通信 引用地址:NEC V850 之 串口通信(UART4)

上一篇:NEC V850 之 定时器TAB (计数溢出功能)
下一篇:NEC V850 之 Key Interrupt

推荐阅读最新更新时间:2024-03-16 15:13

NEC将打造大型犯罪侦查生物识别系统
近日NEC集团子公司NEC美国对外宣布,已协助美国洛杉矶郡警察局以服务型方式顺利导入犯罪侦查用的“多模生物识别系统”,利用指纹、掌纹、人脸、虹膜等生物信息来进行身份的识别。 该系统目前已与加州司法部及FBI在内的多个数据库进行了串接,未来将成为全球最大的犯罪侦查用生物识别系统之一。在系统部署运行的第一周里,通过指纹对比,让107件未破案件取得了突破性进展。 在20世纪70年代时,NEC便开始了指纹识别、掌纹识别和人脸识别等生物特征认证技术的研发,旗下生物识别产品群“Bio-IDiom”系统已进入全球70余个国家当中,这套“多模生物识别系统”正是基于此打造的。 以Bio-IDiom中的
[安防电子]
两条8英寸生产线并驾齐驱 华虹NEC二厂顺利量产
上海华虹NEC电子有限公司(以下简称“华虹NEC”)近日宣布,位于张江高科技园区的华虹NEC二厂已经于2007年9月顺利量产。 华虹NEC二厂于今年3月份开始搬入设备,在短短六个月之内,就已成功实现多个产品的量产,并且通过了其终端用户的可靠性认证。“二厂能够按计划快速顺利量产,是基于一厂多年累积的实战经验和专业的国际化团队的管理能力。这也是华虹NEC高效执行力的充分体现。”华虹NEC副总裁、首席营运官郑加镇博士表示。 至此,华虹NEC位于上海浦东金桥出口加工区和张江高科技园区的两条8英寸生产线并驾齐驱,为公司的晶圆代工业务保航,提供稳定的产能,为客户提供优质可靠的代工服务。 目前,华虹NEC产能已经达到了每月63,000片。
[焦点新闻]
STM32复习笔记(四)串口通信
一、常见的串行通信接口: 二、STM32的串口通信接口: UART:通用异步收发器 USART:通用同步异步收发器 大容量STM32F10x系列芯片,包含3个USART和2个UART 三、UART异步通信方式引脚连接方法: -RXD:数据输入引脚。数据接受。 -TXD:数据发送引脚。数据发送。 四、UART异步通信方式引脚: -RXD:数据输入引脚。数据接受。 -TXD:数据发送引脚。数据发送。 五、UART异步通信方式特点: 全双工异步通信。 分数波特率发生器系统,提供精确的波特率。 -发送和接受共用的可编程波特率,最高可达4.5Mbits/s 可编程的数据字长度(8位或者
[单片机]
STM32复习笔记(四)<font color='red'>串口通信</font>
深入理解51单片机串口通信及通信实例
  串口通信的原理   串口通信(SerialCommunications)的概念非常简单,串口按位(bit)发送和接收字节。尽管比按字节(byte)的并行通信慢,但是串口可以在使用一根线发送数据的同时用另一根线接收数据。它很简单并且能够实现远距离通信。比如IEEE488定义并行通行状态时,规定设备线总长不得超过20米,并且任意两个设备间的长度不得超过2米;而对于串口而言,长度可达1200米。典型地,串口用于ASCII码字符的传输。通信使用3根线完成,分别是地线、发送、接收。由于串口通信是异步的,端口能够在一根线上发送数据同时在另一根线上接收数据。其他线用于握手,但不是必须的。串口通信最重要的参数是波特率、数据位、停止位和奇偶校验
[单片机]
深入理解51单片机<font color='red'>串口通信</font>及通信实例
stm32 F407串口通信出现乱码
一直用正点原子的例程,后面开始在官网上下载库,完成自己写,到串口通信这里,发现写的东西跟例程一样,输出一直是乱码; 折腾半天是因为 晶振的问题。 我的板子HSE晶振为8M,分频是8;官网提供的25M,分频为25;(为什么分频后相同不能用?是因为板子晶振不对?) (为什么官网的晶振频率不可更改 25 ?);现在只是打印字符,还没有进行通信 修改后正确; 修改后输出正确结果,之前都是乱码
[单片机]
stm32 F407<font color='red'>串口通信</font>出现乱码
单片机串口通信-字符数组
在上一篇文章中可以看到,利用一个一个字符来判断命令和通信协议不但很麻烦,而且有很大的缺陷,比如:输入一个字符串其中只要有命令就会执行,而且上一篇的程序不可以处理一些特殊的字符串(停止命令是end,但是如果是输入一个en的话,就会卡在while(RI==0),这个语句里,没有下一个字符的输入,RI在上面的程序被置为0,就会一直在while语句里出不来。如果一开始就置为1的话,就接受不到下一个字符了) 所以我又重新开始考虑用字符数组处理命令,再用上个程序之前其实最初是用字符数组来做这个程序的,但是一直都有一些问题没有解决;昨天我用c++来做了一个字符接收和判读函数,然后用keil做一个同样的程序发现还是用一些同的: C语言和c++里面
[单片机]
魔方机器人之下位机编程-----两种串口通信方式的比较
由于上位机软件的串口通信部分和魔方复原算法部分已经完成,接下来的一步就是如何将魔方复原的具体步骤(字符串的形式)通过串口发送给单片机MC9S12XS128单片机了,调试的过程中,采用了两种串口通信的方式,一种是查询的方式,另一种是中断的方式。首先采用的是查询的方式,通过循环,不断的判断有没有接收到数据,如果接收到数据,则单片机向电脑立即发送接收到的数据。单纯的执行数据的接收和发送不执行其他的操作,正常的收发是没有问题的。但是当将PWM程序和传统通信程序整合到一起的时候,问题出现了,由于PWM程序含有占空比赋值语句和延时函数,当上位机发送的数据的时候,如果下位机没有执行到串口接收的部分,将会造成数据接收的数据不完整甚至接收不到数据。
[单片机]
魔方机器人之下位机编程-----两种<font color='red'>串口通信</font>方式的比较
STM32串口通信的重要性
刚开始学单片机的你,是不是会因用程序把LED点亮而感到高兴,会因用程序把数码管点亮而感到高兴。这是好事,这也是想继续学习下去的动力。 但是数据相关的实验是学习单片机和STM32的一道坎,此时就需要用好本文要说的串口这个调试工具。 串口通信介绍 关于串口通信的介绍,也可以点击阅读之前发的一篇文章。 STM32串口通信基本原理 串口通信是指外设和计算机间,通过数据信号线 、地线、控制线等,按位进行传输数据的一种通讯方式。..。..这种太过理论了,看似懂了,但又不懂。还是用我笔者自己的话来说吧。 串口通信就是可以把程序在单片机或者STM32芯片中运行的结果发送到电脑的一种通信方式。 如何使用串口通讯,你需要知道的几个重要的知识点
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved