搜索
bottom↓
回复: 6

MCF52259开发板485通信演示程序

[复制链接]

出0入0汤圆

发表于 2014-12-30 13:01:53 | 显示全部楼层 |阅读模式
这是MCF52259开发板上写的一个演示485通信的例子。实现的功能很简单,就是通过485收到一个字节就立马再通过485发出去
/*********************************************************
@ Nicrosystem Freescale coldfire MCF52259 Development Board
@ NSCF52259-R1
@ author:bluehacker
@ date:2009-12-01
**********************************************************/
#include "uart.h"


uint8 uart_init(uint8 channel,uint32 sysClockKhz,uint32 baudRate)
{
        uint16 ubgs;
       
        if(channel>2)
        {
                return 1;//error
        }
        set_gpio_uart(channel);
        /*
         * Reset Transmitter
         */
        MCF_UART_UCR(channel) = MCF_UART_UCR_RESET_TX;

        /*
         * Reset Receiver
         */
        MCF_UART_UCR(channel) = MCF_UART_UCR_RESET_RX;

        /*
         * Reset Mode Register
         */
        MCF_UART_UCR(channel) = MCF_UART_UCR_RESET_MR;

        /*
         * No parity, 8-bits per character
         */
        MCF_UART_UMR(channel) = (0
                | MCF_UART_UMR_PM_NONE
                | MCF_UART_UMR_BC_8 );

        /*
         * No echo or loopback, 1 stop bit
         */
        MCF_UART_UMR(channel) = (0
                | MCF_UART_UMR_CM_NORMAL
                | MCF_UART_UMR_SB_STOP_BITS_1);

        /*
         * Set Rx and Tx baud by SYSTEM CLOCK
         */
        MCF_UART_UCSR(channel) = (0
                | MCF_UART_UCSR_RCS_SYS_CLK
                | MCF_UART_UCSR_TCS_SYS_CLK);

        /*
         * Mask all UART interrupts
         */
        MCF_UART_UIMR(channel) = 0;
       
        /*
         * Calculate baud settings
         */
        ubgs = (uint16)((sysClockKhz * 1000)/(baudRate * 32));

        MCF_UART_UBG1(channel) = (uint8)((ubgs & 0xFF00) >> 8);
        MCF_UART_UBG2(channel) = (uint8)(ubgs & 0x00FF);
        /*
         * Enable receiver and transmitter
         */
        MCF_UART_UCR(channel) = (0
                | MCF_UART_UCR_TX_ENABLED
                | MCF_UART_UCR_RX_ENABLED);
       
        return 0;//success
}

void set_gpio_uart(uint8 channel)
{
        switch(channel)
        {
                case 0:
                MCF_GPIO_PUAPAR|=MCF_GPIO_PUAPAR_UTXD0_UTXD0 |
                MCF_GPIO_PUAPAR_URXD0_URXD0 |MCF_GPIO_PUAPAR_URTS0_URTS0 |
                MCF_GPIO_PUAPAR_UCTS0_UCTS0 ;
                break;
               
                case 1:
                MCF_GPIO_PUBPAR|=MCF_GPIO_PUBPAR_UTXD1_UTXD1  |
                MCF_GPIO_PUBPAR_URXD1_URXD1 ;
                break;
               
                case 2:
                MCF_GPIO_PUCPAR|=MCF_GPIO_PUCPAR_UTXD2_UTXD2  |
                MCF_GPIO_PUCPAR_URXD2_URXD2 ;
                break;
               
                default:
                break;
        }
       
}

/*
* Wait for a character to be received on the specified UART
*
* Return Values:
*  the received character
*/
char uart_getchar (uint8 channel)
{
    /* Wait until character has been received */
    while (!(MCF_UART_USR(channel) & MCF_UART_USR_RXRDY))
    {
           
    };

    return (char)MCF_UART_URB(channel);
}


/********************************************************************/
/*
* Wait for space in the UART Tx FIFO and then send a character
*/
void uart_putchar (uint8 channel, char ch)
{
    /* Wait until space is available in the FIFO */
    while (!(MCF_UART_USR(channel) & MCF_UART_USR_TXRDY))
    {
           
    };

    /* Send the character */
    MCF_UART_UTB(channel) = (uint8)ch;
}

/*********************
* send a string using poll mode
*******************/
void uart_putstr(uint8 channel, char *str)
{
        while(*str!=0)
        {
                uart_putchar(channel,*str++);
        }
}
//main.c
/*********************************************************
@ Nicrosystem Freescale coldfire MCF52259 Development Board
@ NSCF52259-R1
@ author:bluehacker
@ date:2009-12-01
**********************************************************/

/*
* main implementation: use this sample to create your own application
*
*/
#include "support_common.h" /* include peripheral declarations and more */
#if (CONSOLE_IO_SUPPORT || ENABLE_UART_SUPPORT)
/* Standard IO is only possible if Console or UART support is enabled. */
#include
#endif
#include "uart.h"
#include "delay.h"

void rs485_init(uint32 baudRate)
{
        MCF_GPIO_PUCPAR &=0x3f;
        MCF_GPIO_DDRUC|=MCF_GPIO_DDRUC_DDRUC3 ;
        MCF_GPIO_PORTUC&=~MCF_GPIO_PORTUC_PORTUC3 ;
        uart_init(1,80000,baudRate);
}

char rs485_getchar()
{
        MCF_GPIO_PORTUC&=~MCF_GPIO_PORTUC_PORTUC3 ;
        return uart_getchar(1);       
}

void rs485_putchar(char ch)
{
        MCF_GPIO_PORTUC|=MCF_GPIO_PORTUC_PORTUC3 ;
        uart_putchar(1,ch);
        while (!(MCF_UART_USR(1) & MCF_UART_USR_TXEMP))
    {
           
    };
        MCF_GPIO_PORTUC&=~MCF_GPIO_PORTUC_PORTUC3 ;
}

int main(void)
{
        int counter = 0;
        char c=0;
       
#if (CONSOLE_IO_SUPPORT || ENABLE_UART_SUPPORT)
        printf("Hello World in C from MCF52259 derivative on MCF52259 board\n\r");
        fflush(stdout);
#endif
        pit_init(0);
        rs485_init(9600);

        for(;;) {          
                   counter++;
           //rs485_putchar(c);
                   c=rs485_getchar();
                   delay_ms(80000,0,10);
                   rs485_putchar(c);
        }
}

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2014-12-30 13:48:17 | 显示全部楼层
这也是飞思卡尔的片子吗?  我看着有点像  MPC呢,

出0入0汤圆

发表于 2014-12-30 14:03:27 | 显示全部楼层
这个代码写的好烂。。。

出0入0汤圆

发表于 2014-12-30 14:14:07 | 显示全部楼层
代码的风格是很重要的

出0入0汤圆

发表于 2014-12-30 14:16:20 | 显示全部楼层
在很多公司,代码的书写,是有严格的规范的。楼主的注意写代码的风格,一定会更好的

出100入101汤圆

发表于 2014-12-30 17:31:39 | 显示全部楼层
mangocity 发表于 2014-12-30 14:03
这个代码写的好烂。。。

具体不好在什么地方?

出0入0汤圆

发表于 2014-12-30 20:01:34 | 显示全部楼层
MCF52259  是飞思卡尔什么系列的片子
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-6-15 18:35

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表