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

📄 main.c

📁 这个程序是在DSP开发平台CCS下运行的
💻 C
字号:
#include "regs.h"
#include "stdio.h"
#include "csl.h"
#include "csl_mcbsp.h"
//global_declare
int g_num_to_recv = 0;//需要接收的数据总数
int g_num_recvd = 0;//已经接收的数据总数
int g_num_to_send = 0;//需要发送的数据总数
int g_num_sent = 0;//已经发送的数据总数
enum {SEND_DATA, RECV_CMD, RECV_DATA, SEND_CMD};
int g_status = SEND_DATA;
int g_is_sender = 0;
int g_is_secret = 0;

MCBSP_Handle g_hMcBsp;
init_mcbsp()
{
	MCBSP_Config config0 = {
		0x00012001, /* spcr */
		0x00010140, /* rcr */
		0x00010140, /* xcr */
		0x00000000, /* srgr */
		0x00000000, /* mcr */
		0x00000000, /* rcer */
		0x00000000, /* xcer */
		0x00000000 /* pcr */
	};
	
	g_hMcBsp = MCBSP_open(MCBSP_DEV0, MCBSP_OPEN_RESET);
	MCBSP_config(g_hMcBsp, &config0);
	MCBSP_start(g_hMcBsp, MCBSP_XMIT_START|MCBSP_RCV_START|MCBSP_SRGR_START|MCBSP_SRGR_FRAMESYNC,
		12500//SRGR延迟:SRGR时钟周期/(2 * 指令周期):200e+6/(2*8e+3)
	);
}
close_mcbsp()
{
	MCBSP_close(g_hMcBsp);
}

init_timer()
{
	RESET_BIT(CTL0, HLD);//终止时钟
	REG_WRITE(PRD0, 5129);//定时为1/8毫秒
	SET_BIT(CTL0, CP);//周期性触发
	SET_BIT(CTL0, CLKSRC);//使用内部时钟
	//使能定时器
	SET_BIT(CTL0, HLD);
	SET_BIT(CTL0, GO);

	RESET_BIT(CTL1, HLD);//终止时钟
	REG_WRITE(PRD1, 5129);//定时为1/8毫秒
	SET_BIT(CTL1, CP);//周期性触发
	SET_BIT(CTL1, CLKSRC);//使用内部时钟
	//使能定时器
	SET_BIT(CTL1, HLD);
	SET_BIT(CTL1, GO);
}

interrupt void c_int14(void)
{//mic
	//关闭中断
	RESET_REG_BIT(IER, IE14);
	if(g_is_secret == 0)
	{
		SET_REG_BIT(IER, IE14);
		return;
	}
	//获取低频信号
	if(g_is_sender == 0)
	{
		//发送低频信号
		SET_REG_BIT(IER, IE14);
		return;
	}
	//隐藏信息
	if(g_num_sent < g_num_to_send)
	{
		//fprintf(stdout, "data_sent:%d\n", g_num_sent);
		g_num_sent++;
	}
	SET_REG_BIT(IER, IE14);
}

interrupt void c_int15(void)
{//mic
	//关闭中断
	RESET_REG_BIT(IER, IE15);
	
	SET_REG_BIT(IER, IE15);
}

interrupt void c_int04(void)
{//mcbsp0 reciever interrupt
	int data;
	
	data = MCBSP_read(g_hMcBsp);
}

void init_inter()
{
	SET_REG(ICR, 0x4000);
	SET_REG_BIT(CSR, GIE);
	LOAD_FIELD(MUXL, 0xd, 0, 4);//选择MCBSP0为4号中断
	SET_REG_BIT(IER, IE4);//enable McBSP0
	SET_REG_BIT(IER, IE14);//enable timer0
	SET_REG_BIT(IER, IE15);//enable timer1
	SET_REG_BIT(IER, NMIE);
}

void delay(unsigned int x)
{
	unsigned int i;
	for(i=0;i<x;i++) 
	{
		asm("nop");
	}
}

void main()
{
/*发送方初始化
	g_status = SEND_DATA;
	g_is_sender = 1;
	g_is_secret = 1;
	g_num_to_send = 20;
	g_num_sent = 0;
	g_num_to_recv = 20;
	g_num_recvd = 0;
	init_inter();
	init_timer();
	while(1)
	{
		switch(g_status)
		{
		case SEND_DATA:
			if(g_num_sent >= g_num_to_send)
			{
				//所需发送的数据已经发送完毕
				//状态转变为接收信令状态
				g_status = RECV_CMD;
				//接收长度为信令长度
				g_num_to_recv = 40;
				//已接收长度为零
				g_num_recvd = 0;
				//角色变为接收方
				g_is_sender = 0;
			}
			break;
		case RECV_CMD:
			if(g_num_recvd >= g_num_to_recv)
			{//接收完毕
				//1、解析命令,若成功,熄灭发送中指示灯
		//		delay(200);
				//2、若失败,选取指定段,构造数据包发送
				g_num_to_send = 40;
				g_num_sent = 0;
				g_status = SEND_DATA;
				g_is_sender = 1;
			}
			break;
		};
		delay(100);
		
	}
	*/
	CSL_init();
	init_mcbsp();
	init_inter();
	while(1)
	{
	}
	close_mcbsp();
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -