📄 boot.c
字号:
/*
;***********************************************************************
;* 北京达盛科技有限公司
;* 研 发 部
;*
;* http://www.techshine.com
;*
;*--------------------------------------------- 文件信息 ---------------
;*
;* 文件名称 : boot.C
;* 文件功能 : 该文件为专家4实验系统的综合程序,CPU=TMS320VC5402
;* 拨码开关SW2 :
; 1-ON、2-ON、3-ON、4-ON:ADCLK=250KHZ,LCD 串行
*/
//---------------------------------------------------------------------
//--------------CPU1\CPU2通讯说明
//---------------------------------------------------------------------
//CPU1 1F80 = 0000H 空循环
// = 1111H IO实验 ,CPU2发送过来的数据在1400H的低8位
// = 2222H DTMF实验,CPU2发送过来的数据从1400H的开始的102个单元
// = 3333H 语音回放
// = 4444H 语音低通
// IF90 = 5555 CPU1准备好,CPU2可以传输数据给CPU1
// = AAAA CPU1没准备好,CPU2不可以传输数据给CPU1
//
// 1FA0 = 5555 CPU2已经完成数据传输
// = AAAA CPU2正在数据传输
//---------------------------------------------------------------------
//------------------头文件--------------------------------------
#include "DspRegDefine.h" //VC5402 寄存器定义
#include "math.h" //数学计算定义
#include "stdio.h" //标准输入输出借口定义
//---------------------------------------------------------------
/* ****************** 宏定义 ***************
*****************************************************************
*/
#define UCHAR unsigned char
#define UINT16 unsigned int
#define UINT32 unsigned long
#define TRUE 1
#define FALSE 0
#define OUTH 0x0000 //LED输出亮
#define OUTL 0xffff //LED输出灭
#define pi 3.1415927
#define Length 102
#define Len 8
//---------------------------------------------------------
/* 端口定义 */
//---------------------------------------------------------
//--------------IO------------------------------
ioport UINT16 port8008; //IO输出地址,LED
//---------------------------------------------------------
/* 全局变量定义 */
//---------------------------------------------------------
//---------------------TIMER0----------------------------
UINT16 TIMER=0,TIMER1=0; //TIMER中断次数计数器
UCHAR TFLAG = 1; //初始化TIMER中断标志TFLAG =1
UINT16 show = 0;
//---------------------HPI------------------------------
int *DAT = (int *)0x1400; //CPU2传送到CPU1的数据的开始地址
UINT16 *COM = (UINT16 *)0x1F80; //CPU2传送给CPU1的命令
UINT16 *RDY1 = (UINT16 *)0x1F90;//CPU1准备好信号
UINT16 *RDY2 = (UINT16 *)0x1FA0;//CPU2准备好信号
//--------------------------------------------------------
UINT16 TCOM,TRDY1,TRDY2,TDAT;
//---------------------DTMF-------------------------------
double indtmf[Length];
double vk[Len][Length],vs1[Len],vs2[Len],v[3],s[Len],z[Len];
double fr0,fr1,fr2,fr3,fc0,fc1,fc2,fc3,fs,fr,fc;
double m1,m0,max1,max2;
char outkey;
//---------------------AIC23-------------------------------
int read_data2,read_data1; //MCBSP1 接收数据变量
int write_data2,write_data1; //MCBSP1 发送数据变量
UINT16 readaudio1[256],readaudio2[256];//MCBSP1 接收数据变量数组
UCHAR flag;
int in[256], out[256]; //输入原始数据、输出处理后的数据
double fs = 8000; //采样频率
double nlpass = 0.028; //通带截止频率
double nlstop = 0.228; //阻带起始频率
double a[3],b[3],x,y; //滤波器参数
int in[256],out[256];
/*
**********************************************************************
*************** 所使用的函数原型 *****************
**********************************************************************
*/
void cpu_init(void); //初始化CPU
void Delay(UINT16 numbers); //延迟
//--------------T0-----------------------------------------------
void set_t0(); //设置T0的寄存器
interrupt void Tint0();//T0中断程序
//----------------------------------------------------------------
//---------------AIC23--------------------------------------------
void aic23_init(void);//初始化TLV320AIC23,设置内部寄存器
void mcbsp0_write_rdy(UINT16 out_data);//MCBSP0发送一个数据
void mcbsp0_init_SPI(void);//MCBSP0设置为SPI模式
void mcbsp0_close(void);//MCBSP0关闭
void mcbsp1_init(void);//MCBSP1初始化
void mcbsp1_write_rdy(UINT16 out_data1,UINT16 out_data2);//MCBSP1发送一个数据32位
void mcbsp1_read_rdy(void);////MCBSP1接收一个数据32位
void mcbsp1_open(void);//MCBSP1打开
void mcbsp1_close(void);//MCBSP1关闭
interrupt void mcbsp1_read(void);//MCBSP1中断接收数据
interrupt void mcbsp1_write(void); //MCBSP1中断发送数据
void biir2lpdes(double fs, double nlpass, double nlstop, double a[], double b[]);
//巴特沃斯低通滤波器参数计算程序
//--------------------------------DTMF--------------------------
void dtmf(void); //DTMF解码程序
/*
************************************************************************
*********************** 函数定义 ******************
************************************************************************
*/
//--------------------------------------------------------------------
// 函数名称 : void cpu_init(void)
// 函数说明 : 初始化CPU
// 输入参数 : 无
// 输出参数 : 无
//--------------------------------------------------------------------
void cpu_init(void)
{
asm(" nop ");
asm(" nop ");
asm(" nop ");
//-------------------------------------------------------------------
//CLKMD DEFINITIONS:
// PLLMUL (bit 15-12) - 0000 PLL multiplier = 0 (mult by 1)
// PLLDIV (bit 11) - 0 PLL divider = 0 (div by 1)
// PLLCOUNT (bit 10-3)- 11111111 PLL counter set to max
// PLLONOFF (bit 2) - 1 PLL on
// PLLNDIV (bit 1) - 1 Select PLL mode
// PLLSTATUS (bit 1) - x PLL Status (read only)
// ------------------
// 0000011111111111 = 0x07ff CLKMD=1 X CLKIN
//--------------------------------------------------------------------
*(unsigned int*)CLKMD=0x0; //switch to DIV mode clkout= 1/2 clkin
while(((*(unsigned int*)CLKMD)&01)!=0);
*(unsigned int*)CLKMD=0x07ff; //switch to PLL X 1 mode
//--------------------------------------------------------------------
// ST0 DEFINITIONS:
// ARP (bit 15-13) - 000 Auxiliary register pointer
// TC (bit 12) - 1 Test/control flag
// C (bit 11) - 1 Carry is set to 1 if the result of an addition generates a carry; it is cleared to 0 if the
// result of a subtraction generates a borrow.
// OVA (bit 10) - 0 Overflow flag for accumulator A
// OVB (bit 9) - 0 Overflow flag for accumulator B
// DP (bit 8-0) - 00000000 Data-memory page pointer
// --------------------
// 0001 1000 0000 0000 =0x1800 Reset value
//--------------------------------------------------------------------
// *(unsigned int*)ST0=0x1800;
//--------------------------------------------------------------------
// ST1 DEFINITIONS:
// BRAF (bit 15) - 0 Block-repeat active flag
// CPL (bit 14) - 1 Compiler mode CPL=0 DP;CPL=1 SP
// XF (bit 13) - 1 XF status
// HM (bit 12) - 0 Hold mode
// INTM (bit 11) - 1 Interrupt mode INTM=0,All unmasked interrupts are enabled
// Reser (bit 10) - 0 Always read as 0
// OVM (bit 9) - 0 Overflow mode
// SXM (bit 8) - 1 Sign-extension mode
// C16 (bit 7) - 0 Dual 16-Bit/double-precision arithmetic mode
// FRCT (bit 6) - 0 Fractional mode
// CMPT (bit 5) - 0 Compatibility mode
// ASM (bit 4-0) - 00000 Accumulator shift mode
// --------------------
// 0110 1001 0000 0000 =0x2900 Reset value
//--------------------------------------------------------------------
// *(unsigned int*)ST1=0x6900;
//--------------------------------------------------------------------
//IPTR DEFINITIONS
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -