当前位置:首页 > DSP嵌入式系统实验报告
{
DXR12=0xc000; }
/*DXR12=0xe000;*/ uWork=DRR12; uWork=uWork>>4;
uWork&=0xff; inp[length]=uWork; length++; length%=256; if(length==0)
{
asm(\ } }
void initMcBSP2( void ) {
SPSA2=SPCR1; SPSD2=0; SPSA2=SPCR2; SPSD2=0; SPSA2=RCR1; SPSD2=0x40; SPSA2=RCR2; SPSD2=0x01; SPSA2=XCR1; SPSD2=0x40; SPSA2=XCR2; SPSD2=0x01; SPSA2=SRGR1; SPSD2=0x83;
/*configuation the McBSP1 as SPI mode*/ SPSA2=SRGR2; SPSD2=0x2000; SPSA2=PCR; SPSD2=0xA08; SPSA2=SPCR1;
SPSD2=0x5801; SPSA2=SPCR2; SPSD2=0xc1; }
三、代码分析
#include \ // 使用工具包c5416regs.h
//宏定义 #define TIM *(int *)0x24 // TIM寄存器在数据存储器中的地址是0x24 #define PRD *(int *)0x25 // PRD寄存器在数据存储器中的地址是0x25 #define TCR *(int *)0x26 // TCR寄存器在数据存储器中的地址是0x26 #define REGISTERCLKMD *(int *)0x58 //REGISTERCLKMD存放在地址0x58中 //I/O接口接入
ioport unsigned int port3006;
void interrupt time(void); //中断调用函数申明 void initMcBSP2( void ); unsigned int nCount; int flage; int uWork;
int inp[256]; //定义数组空间 int length; int channel; main() {
int j;
asm(\*(int *)0x58=0x0;
// 关闭可屏蔽中断 //REGISTERCLKMD初始状态
j= PMST; // 设置PMST寄存器
PMST = j&0xff; //中断向量表起始地址=80H IMR = 0x8; //使能TINT
TCR = 0x417; PRD = 0x157; TCR = 0x427; IFR = 0x100;
// 计数器分频系数=8 //周期寄存器为 0x157
// 控制字为0000 1000 0010 0111B,为复位片内定时器 // 其中,时钟周期为8MHz
TIM = 8; //时钟计时器值=8
flage=0; channel=0; port3006=1;
*(int *)0x58=0x2004; //REGISTERCLKMD为2004H initMcBSP2(); //调用 initMcBSP2 }
// 定时器中断服务程序,完成:保存转换结果、启动下次转换 void interrupt time(void) {
if(channel) {
DXR12=0xe000; //如果channel=1,则保存转换结果 } else {
DXR12=0xc000; //否则启动下次转换 }
/*DXR12=0xe000;*/ uWork=DRR12; uWork=uWork>>4; uWork&=0xff; // inp[length]=uWork; length++; length%=256; if(length==0)
asm(\
// 开中断进行转换
while ( 1 ); //不断循环
{
asm(\ //等待响应,延时 } }
void initMcBSP2( void ) /*配制McBSP1作为SPI模式*/ {
SPSA2=SPCR1; SPSD2=0; SPSA2=SPCR2; SPSD2=0; SPSA2=RCR1; SPSD2=0x40; SPSA2=RCR2; SPSD2=0x01; SPSA2=XCR1; SPSD2=0x40; SPSA2=XCR2; SPSD2=0x01; SPSA2=SRGR1; SPSD2=0x83;// SPSA2=SRGR2; SPSD2=0x2000; SPSA2=PCR; SPSD2=0xA08; SPSA2=SPCR1; SPSD2=0x5801; SPSA2=SPCR2; SPSD2=0xc1; }
五、实验结果
- 用实验中的设置,我们可以看到结果为:
共分享92篇相关文档