6159|3

147

帖子

0

TA的资源

一粒金砂(高级)

楼主
 

富士通mb9bf506串口通讯 [复制链接]

比较关注我们家庭物联网的网友都会有个疑问,很多人都没在做富士通,在做430。其实我们是有原因的,因为物联网注定了我们需要网络节点,而富士通板子只有一块,所以采用了TI的430作为子节点的控制芯片。

 

现奉上MB9BF506R的串口通讯代码:

/*=============================================================================
   [NOTE] Connected chart
-------------------------------------------------------------------------------
     PC
   +-----------------------+
   | Baudrate : 9600 bps |
   | DataBit  : 8 bit      |
   | Parity   : None       | <-----> MFS Ch4@MB9BF506 Board
   | StopBit  : 1 bit      |
   | FlowCtl  : None       |
   +-----------------------+

=============================================================================*/
#include <intrinsics.h>
#include <stdio.h>
#include <stdlib.h>
#include <Fujitsu/iomb9bf506r.h>
#include <assert.h>

/*************************************************************************
 * Function Name: NVIC_IntEnable
 * Parameters: IntNumber - Interrup number
 * Return: void
 *
 * Description: Enable interrup at NVIC
 *
 *
 *************************************************************************/
void NVIC_IntEnable(unsigned char IntNumber)
{
  volatile unsigned long * pNVIC_SetEn = &SETENA0;

//  assert((NVIC_FCS <= IntNumber) && (NVIC_DMA_CH7 >= IntNumber));
  IntNumber -= NVIC_FCS;

  pNVIC_SetEn += IntNumber/32;
  *pNVIC_SetEn = (1UL<<(IntNumber%32));

}

 

/*************************************************************************
 * Function Name: InitClock
 * Parameters: void
 * Return: void
 *
 * Description: Initialize PLL to 80MHz,
 *              Base Clock  = 80MHz
 *              APB0 = APB1 = APB2 = 40MHz
 *
 *************************************************************************/
void InitClock(void)
{
    /*set Main clock stabilization
    wait time to 2ms*/
    CSW_TMR_bit.MOWT = 9;
    /*Enable Main Oscilator*/
    SCM_CTL_bit.MOSCE = 1;
    /*Wait stabilization end*/
    while(!SCM_STR_bit.MORDY);
    /*Set PLL stabilization
    wait time to 512uS*/
    PSW_TMR_bit.POWT = 2;
    /*Set PLL to 80MHz*/
    PLL_CTL1 = 0; /*K = 1, M=1*/
    PLL_CTL2 = 19; /*N = 20*/
    /*Enable PLL*/
    SCM_CTL_bit.PLLE = 1;
    /*Set bus prescalers*/
    BSC_PSR_bit.BSR = 0;      /*Base clock Prescaler 1:1*/
    APBC0_PSR_bit.APBC0 = 2;  /*APB0 clock Prescaler 1:2*/
    APBC1_PSR_bit.APBC1 = 2;  /*APB1 clock Prescaler 1:2*/
    APBC2_PSR_bit.APBC2 = 2;  /*APB2 clock Prescaler 1:2*/
    /*Wait PLL stabilizatoin end*/
    while(!SCM_STR_bit.PLRDY);
    /*Select PLL for main clock*/
    SCM_CTL_bit.RCS = 2;
    /*Wait PLL to be connected*/
    while(2 != SCM_STR_bit.RCM);
}

void MFSI_RX2_IRQHandler(void)
{
    char rx_buff;
   if(((UART2_SSR&0x08)>>3) == 1)
       UART2_SSR = 0x80;
   else
   {
       rx_buff=UART2_RDR;
       if(rx_buff == 0xaa)
           PDOR3 = 0x00;
       UART2_TDR = UART2_RDR;
   }
}

void MFSI_TX2_IRQHandler(void)
{
  //  char tx_buff;
/*   if(((UART2_SSR&0x03)>>1) == 1)
   {
       UART2_RDR = 0xaa;
  //     if(rx_buff == 0x00f8)
           PDOR3 = 0x00;
  //     else if(rx_buff == 0x00)
           PDOR3 = 0x0c00;
   }     */
   UART2_SSR = 0x80;
}

int main(void)
{
    char rx_buff;
    /*Unlock sequence*/
    WDG_LCK = 0x1ACCE551;
    WDG_LCK = 0xE5331AAE;
    WDG_CTL = 0;
   
    InitClock();
 //   UART2_SSR = 0x80;
    PFR3 = 0x0000;
    DDR3 = 0xffff;
    PDOR3 = 0x0000;
    /* Set Uart Ch2 Port, SIN2_1, SOT2_1 */
    PFR2 |= 0x0030;
    EPFR07 = 0x000a0000;
 //   PCR2 = 0xffff;
 //   DDR2 = 0xfffd;
   
 //   UART2_SCR |= 0x80;
    /*Progarmmable clear,disable receive,transmit,bus idle and data reception interrupt,enable transmission*/
    UART2_SCR = 0x1b;
    /*MODE 0(正常模式)   SIN引脚作为外部中断引脚   1位停止位   小端LSB  使能串口输出*/
    UART2_SMR = 0x11;
    /*不使能硬件流控制  NRZ  偶校验*/
    UART2_ESCR = 0x00;
    UART2_BGR = 0x0823;
    NVIC_IntEnable(NVIC_MFSI_RX2);
    NVIC_IntEnable(NVIC_MFSI_TX2);
    while(1)
    { 
   
        if(((UART2_SSR&0x04)>>2) == 1)
        {
            rx_buff=UART2_RDR;
            if(rx_buff == 0xaa)
              PDOR3 = 0x00;
            else if(rx_buff == 0x00)
              PDOR3 = 0x0c00;
        }          
  //      UART2_RDR = 0xaa;
    }
}

 

接如下端口:

效果如下:

最新回复

官方给出的例程,就寄存器开发而言,写的比较标准了。。。理一理,都能看明白。。。  详情 回复 发表于 2017-12-14 17:26

点评

不错。  详情 回复 发表于 2012-7-16 09:16
点赞 关注
 

回复
举报

849

帖子

0

TA的资源

纯净的硅(高级)

沙发
 

回复 楼主 youyou_hu111 的帖子

不错。
个人签名只有想不到,没有做不到。
 
 

回复

1万

帖子

16

TA的资源

版主

板凳
 

那个波特率的分频数怎么算出的

个人签名http://shop34182318.taobao.com/
https://shop436095304.taobao.com/?spm=a230r.7195193.1997079397.37.69fe60dfT705yr
 
 
 

回复

17

帖子

0

TA的资源

一粒金砂(中级)

4
 
官方给出的例程,就寄存器开发而言,写的比较标准了。。。理一理,都能看明白。。。
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/6 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表