📄 main.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 + -