📄 dec5416.c
字号:
/*********************************************************************************
*DEC5416.C v1.00 *
* 版权(c) 2003- 北京合众达电子技术有限责任公司 *
* 设计者: 段立锋 *
*********************************************************************************/
#include "type.h"
#include "sysreg.h"
#include "uart.h"
#include "codec.h"
#include "mcbsp54.h"
#include "dma54xx.h"
#define MCBSP0_SPSA 0x0038u
#define MCBSP0_SPSD 0x0039u
#define MCBSP1_SPSA 0x0048u
#define MCBSP1_SPSD 0x0049u
#define MCBSP2_SPSA 0x0034u
#define MCBSP2_SPSD 0x0035u
#define MCBSP_SPCR1_SUB_ADDR 0x0000u
#define MCBSP_SPCR2_SUB_ADDR 0x0001u
#define MCBSP_RCR1_SUB_ADDR 0x002
#define MCBSP_RCR2_SUB_ADDR 0x003
#define MCBSP_XCR1_SUB_ADDR 0x004
#define MCBSP_XCR2_SUB_ADDR 0x005
#define MCBSP_SRGR1_SUB_ADDR 0x0006u
#define MCBSP_SRGR2_SUB_ADDR 0x0007u
#define MCBSP_MCR1_SUB_ADDR 0x0008u
#define MCBSP_MCR2_SUB_ADDR 0x0009u
#define SRGR1_INIT 0x0001u
#define MCBSP_PCR_SUB_ADDR 0x00E
/*系统缓冲区的定义:
*系统缓冲区的定义:
*第0~3个字节:串口通路A的寄存器缓冲
*第4个字节:5个字节:串口通路B的寄存器缓冲
*第6~7个字节:系统寄存器的读写缓冲
*第8个字节 :A通路接收缓冲区每次接收的长度
*第9个字节 :B通路接收缓冲区第次接收的长度
*第10个字节 :A通路当前接收缓冲区的地址
*第11个字节 :B通路当前接收缓冲区的地址
*第12个字节 :A通路的FIFO的深度
*第13个字节 : B通路的FIFO的深度
*第14个字节 :UART的状态区
*第15个字节 :A通路数据准备好
*第16个字节 :B通路数据准备好
*第17个字节 :A通路出现故障
*第18个字节 :B通路出现故障
*第19个字节 : A通路已接收的数据
*第20个字节 : B通路已接收的数据
*第21个字节 :A通路有新帧
*第22个字节 :B通路有新帧
*第23个字节 :A通路中断超时
*第24个字节 :B通路中断超时
*第25个字节 :A通路较验出错
*第26个字节 :B通路较给出错
*第27个字节 :系统的时钟设置
*/
#define UARTA0 0x0
#define UARTA1 0x1
#define UARTA2 0x2
#define UARTA3 0x3
#define UARTB1 0x4
#define UARTB2 0x5
#define SYSB0 0x6
#define SYSB1 0x7
#define RECALON 0x8
#define RECBLON 0x9
#define RECAADDR 0xA
#define RECBADDR 0xB
#define FIFOADIP 0xC
#define FIFOBDIP 0xD
#define UARTSTAT 0xE
#define RECARDY 0xf
#define RECBRDY 0x10
#define UARTAERR 0x11
#define UARTBERR 0x12
#define UARTACOUNT 0x13
#define UARTBCOUNT 0x14
#define RECANEW 0x15
#define RECBNEW 0x16
#define UARTIMEA 0x17
#define UARTIMEB 0x18
#define UARTCHEKA 0x19
#define UARTCHEKB 0x1a
#define SYSCLOCKS 0x1b
#define MCBSP_CLKGDV 0x20 /*同步串口时钟设置*/
#define MCBSP_CLK_SPI 0x1000 /*同步串口时钟模式设置*/
/*系统状态缓冲区*/
#pragma DATA_SECTION(sys_statbuff,".sys_buffer")
unsigned int sys_statbuff[32];
/*串口A接收缓冲区*/
#pragma DATA_SECTION(uarta_recbuff,".uarta_rsect")
char uarta_recbuff[1030];
/*串口B接收缓冲区*/
#pragma DATA_SECTION(uartb_recbuff,".uartb_rsect")
char uartb_recbuff[1030];
unsigned int uart_timeout = 0x200;
/******************************************************************************/
/* Dec5416_init() - 初始化DEC5416的板卡,设置系统缓冲区的初始值 */
/* */
/* 参数: */
/* 无 */
/* */
/* 返回值: - 对应的有效句柄 */
/* */
/******************************************************************************/
unsigned int dec5416_init()
{
unsigned int i;
/*初始化系统缓冲区*/
for(i = 0 ; i<32;i++)
{
sys_statbuff[i] = 0 ;
}
/*设置系统的默认时钟*/
sys_clk(CLK80);
/*初始化串口发送与接收缓冲区*/
for(i = 0 ; i<128 ; i++)
{
uarta_recbuff[i] = 0;
uartb_recbuff[i] = 0;
}
return OK;
}
/******************************************************************************/
/* uart_open() - 打开相应的异步串口,获得有效的句柄 */
/* */
/* 参数: */
/* uart:选择要打开的异步串口 */
/* */
/* 返回值: 对应的有效句柄 */
/* 当返回值为0xFFFF时,为无效句柄 */
/* */
/******************************************************************************/
HANDLE uart_open(UartId uart)
{
int data_return;
if(uart == 0)
{
data_return = 0x10;
return (HANDLE) data_return;
}
if(uart == 1)
{
data_return = 0x18;
return (HANDLE) data_return;
}
data_return = 0xFFFF;
return (HANDLE) data_return;
}
/******************************************************************************/
/* uart_setup() - 设置串口通讯的状态
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -