TI中文支持网
TI专业的中文技术问题搜集分享网站

5509A的McBSP配置为I/O时,PC机中的值如何保存在PCR_1寄存器中值?

uart通信试验程序中:

//设置McBSP的PCR寄存器指针,用于读写其I/O端口
ioport unsigned int *PCR_1=(unsigned int *)0x2c12;

#define REG_PCR1 (*PCR_1)

interrupt void timer0Isr(void){ temp = REG_PCR1;

//Receive
if((uart_bitcnt==0)&&(uart_recstart==0))
{
if((temp&0x0010)==0) //PCR寄存器的第4位,即DRSTAT域为0//
{
timer0_cnt = 0;
timer0_cnten = 1;
uart_bitscan = 0;
uart_rec = 0;
uart_recstart = 1;
}
}
if(timer0_cnten==1)
{
timer0_cnt++;
if((temp&0x0010)!=0) //PCR寄存器的第4位,即DRSTAT域为1//
{
uart_bitscan++;
}
if(timer0_cnt==10)
{
timer0_cnt = 0;
if(uart_bitscan>5)
{
switch(uart_bitcnt)
{
case 0: uart_rec = 0;
timer0_cnten = 0;
uart_recstart = 0;
break;
case 1: uart_bitcnt++;
uart_rec |= 0x01;
break;
case 2: uart_bitcnt++;
uart_rec |= 0x02;
break;
case 3: uart_bitcnt++;
uart_rec |= 0x04;
break;
case 4: uart_bitcnt++;
uart_rec |= 0x08;
break;
case 5: uart_bitcnt++;
uart_rec |= 0x10;
break;
case 6: uart_bitcnt++;
uart_rec |= 0x20;
break;
case 7: uart_bitcnt++;
uart_rec |= 0x40;
break;
case 8: uart_bitcnt++;
uart_rec |= 0x80;
break;
case 9: uart_bitcnt = 0;
timer0_cnten = 0;
uart_recflag = 1;
uart_recstart = 0;
break;
default: break;
}
}
else
{
uart_bitcnt++;
if(uart_bitcnt>9)
{
uart_bitcnt = 0;
timer0_cnten = 0;
}
}
uart_bitscan = 0;
} }

}

由于*PCR_1指向地址0x2c12,初始值为0,所以temp中初始值为0?

那DR引脚接收到的值是如何执行接收操作的呢?0x2c12中的值即temp的值如何改变?

Shine:

DR管脚只能作为输入管脚,它的电平值要看你外面给的是高电平还是低电平。

meng yang2:

回复 Shine:

输入引脚的值判断为高电平或者低电平之后,通过switch能够解码传送过来的字符串值,但是在swith语句中进行解码时,每位是高或低电平从哪里应够体现出来?

比如例子

从例子中看出是执行swith语句,转到每个case之后,就能够得到传送过来的字符串中的对应位的值,最后把相对应的值做或操作,得到字符串的值。那程序中uar_rec与0~7位的1值做或操作,得到的uart_rec每位的结果不都是1了吗?那switch是如何解码字符串的呢?

赞(0)
未经允许不得转载:TI中文支持网 » 5509A的McBSP配置为I/O时,PC机中的值如何保存在PCR_1寄存器中值?
分享到: 更多 (0)