⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dec5416.c

📁 5416完整例程
💻 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 + -