10822|0

6828

帖子

0

TA的资源

五彩晶圆(高级)

楼主
 

一个TMS320F28035的串口驱动程序 [复制链接]

/************************************
    标题:MySci.h
    软件平台:CCS v5.2
    硬件平台:TMS320F28035coreboard

*************************************/  
#ifndef MySci_H_  
#define MySci_H_  

#include "PeripheralHeaderIncludes.h"  
#include   

#define RECEIVER_BUFF_SIZE 50  

struct Sci_send_data{  
    char *AddPtr;  
    char length;  
};  

extern char receiver_counter;  
extern struct Sci_send_data data;  
extern char receiver_data_buff[RECEIVER_BUFF_SIZE];  

void MySci_init();  
bool MySci_send(char *Ptr,char length);  

#endif /* MySci_H_ */  


[cpp] view plain copy
/************************************
    标题:MySci.c
    软件平台:CCS v5.2
    硬件平台:TMS320F28035coreboard
    主频:60M

       描述:串口通信,波特率38400,自动中断发送,不必多余的等待
    注意:如果用fifo,就不用判断SciaRegs.SCIRXST.bit.RXRDY,此位不会生效
      基于2803x C/C++ Header Files V1.21
   
*************************************/  
#include"MySci.h"  

struct Sci_send_data data;  
char receiver_data_buff[RECEIVER_BUFF_SIZE];  
char receiver_counter = 0;  

interrupt void rece_isr();  
interrupt void tx_isr();  

void MySci_init()  
{  
    /*配置GPIO*/  
       EALLOW;  
       GpioCtrlRegs.GPAPUD.bit.GPIO28 = 0;    // Enable pull-up for GPIO28 (SCIRXDA)  
       GpioCtrlRegs.GPAPUD.bit.GPIO29 = 0;     // Enable pull-up for GPIO29 (SCITXDA)  
       GpioCtrlRegs.GPAQSEL2.bit.GPIO28 = 3;  // Asynch input GPIO28 (SCIRXDA)  
       GpioCtrlRegs.GPAMUX2.bit.GPIO28 = 1;   // Configure GPIO28 for SCIRXDA operation  
       GpioCtrlRegs.GPAMUX2.bit.GPIO29 = 1;   // Configure GPIO29 for SCITXDA operation  
       EDIS;  

     /*配置fifo*/  
       SciaRegs.SCIFFTX.all=0xC060;  
       SciaRegs.SCIFFRX.all=0x0021;  //fifo接收到一个字节就中断  
       SciaRegs.SCIFFCT.all=0x0;  

     /*配置sci*/  
       SciaRegs.SCICCR.all = 0x0007;   // 1 stop bit,  No loopback  
                                       // No parity,8 char bits,  
                                       // async mode, idle-line protocol  
       SciaRegs.SCICTL1.all = 0x0063;  // enable TX, RX, RX ERR internal SCICLK,  
                                       // Disable SLEEP, TXWAKE  
       //SciaRegs.SCICTL2.bit.TXINTENA = 1;  
       SciaRegs.SCICTL2.bit.RXBKINTENA = 1;  
       SciaRegs.SCIHBAUD    = 0x0000;  // 38400 baud @LSPCLK = 15MHz (60 MHz SYSCLK).  
       SciaRegs.SCILBAUD    = 0x0030;  

       SciaRegs.SCICTL1.all = 0x0063;  // Relinquish SCI from Reset  
       SciaRegs.SCIFFTX.bit.TXFIFOXRESET=1;  
       SciaRegs.SCIFFRX.bit.RXFIFORESET=1;  

       /*配置中断*/  
       EALLOW;  
       PieVectTable.SCITXINTA = &tx_isr; //注册中断向量表  
       PieVectTable.SCIRXINTA = &rece_isr;  
       PieCtrlRegs.PIECTRL.bit.ENPIE = 1;   //使能PIE  
       PieCtrlRegs.PIEIER9.bit.INTx1=1;     //使能int9.1  
       PieCtrlRegs.PIEIER9.bit.INTx2=1;     //使能int9.2  
       IER |= (1<<8);//使能int9  
       EINT;  
       EDIS;  

       data.length=0;  
       data.AddPtr=0;  
}  

bool MySci_send(char *Ptr,char length)  
{  
    if(SciaRegs.SCIFFTX.bit.TXFFIENA==1)  
        return false;  
    else  
    {  
        data.AddPtr = Ptr;  
        data.length = length;  
        SciaRegs.SCIFFTX.bit.TXFFIENA=1;  
    }  
    return true;  
}  

interrupt void tx_isr()  
{  
    if( data.length)  
    {  
        SciaRegs.SCITXBUF = *data.AddPtr++;  
        data.length--;  
    }  
    else  
        SciaRegs.SCIFFTX.bit.TXFFIENA=0;  
    SciaRegs.SCIFFTX.bit.TXFFINTCLR=1;  
    PieCtrlRegs.PIEACK.all |= PIEACK_GROUP9;  
}  

interrupt void rece_isr()  
{  
    if(SciaRegs.SCIRXST.bit.RXERROR)  
    {  
        while(1);  
    }  
    if( receiver_counter != RECEIVER_BUFF_SIZE)  
        receiver_data_buff[receiver_counter++] = SciaRegs.SCIRXBUF.bit.RXDT;  

    SciaRegs.SCIFFRX.bit.RXFFOVRCLR=1;   // Clear Overflow flag  
    SciaRegs.SCIFFRX.bit.RXFFINTCLR=1;   // Clear Interrupt flag  
    PieCtrlRegs.PIEACK.all |= PIEACK_GROUP9;  
}  
 
点赞 关注

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

查找数据手册?

EEWorld Datasheet 技术支持

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

 
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
快速回复 返回顶部 返回列表