在线时间15 小时
UID421178
注册时间2013-3-15
NXP金币0
该用户从未签到
金牌会员
 
- 积分
- 2167
- 最后登录
- 1970-1-1
|
发表于 2013-8-21 10:29:04
|
显示全部楼层
回复:kineitic ezport问题(看过了AN4406)
回复第 17 楼 于2013-08-20 21:01:27发表:
谢谢!今天重新试了下,重新下载的MAHUI版主给的demo,这次是对的了。对比了下之前的程序发现芯片型号还有core都没有选择正确,不知道当时怎么下载成功的了...
另外还有一个问题,我自己写的还是没有调通,和demo最大的区别是SPI接收和发送函数,demo只用了一个hal_spi_transfer_one_byte完成发送和接收,这样发送函数里面的PUSHER寄存器的CONT位貌似就在控制PCS信号了,而我是两个不同函数,这样接收的时候就没有用pusher控制的CONT位控制片选信号,不知道可以单独不?
附函数:
void spi_send_onebyte(uint8 spiNo,uint8 data,uint8 end)//发送
{
SPI_MemMapPtr BaseAdd = spi_get_base_address(spiNo);
SPI_SR_REG(BaseAdd) = (SPI_SR_EOQF_MASK
| SPI_SR_TFUF_MASK
| SPI_SR_TFFF_MASK
| SPI_SR_RFOF_MASK
| SPI_SR_RFDF_MASK)
;//ÖÃλ¸÷±ê־λ
SPI_MCR_REG(BaseAdd) |= SPI_MCR_CLR_TXF_MASK
| SPI_MCR_CLR_RXF_MASK
;//Çå³ýRX,TX FIFO¶ÓÁмÆÊýÆ÷
if(end)//ĩβ×Ö·û
{
SPI_PUSHR_REG(BaseAdd) = 0
| SPI_PUSHR_CTAS(0)
| SPI_PUSHR_EOQ_MASK//×îºóÒ»¸öÊý¾Ý
| SPI_PUSHR_PCS(1)
| SPI_PUSHR_TXDATA(data);
}
else
{
SPI_PUSHR_REG(BaseAdd) = 0 | SPI_PUSHR_CONT_MASK //ƬѡÐźÅʼÖÕʹÄÜ
| SPI_PUSHR_CTAS(0)//CTAR0Ñ¡Ôñ
| SPI_PUSHR_PCS(1)//ÖÃλƬѡÐźţºPCS0=1
| SPI_PUSHR_TXDATA(data);//·¢ËÍÊý¾Ýdata
}
}
uint8 spi_re(uint8 spiNo)//接收
{
uint8 data;
SPI_MemMapPtr BaseAdd = spi_get_base_address(spiNo);
while(!(SPI_SR_REG(BaseAdd) & SPI_SR_RFDF_MASK));//½ÓÊÕRXFIFOÊÇ·ñΪ¿Õ
data= (uint8)SPI_POPR_REG(BaseAdd);
SPI_SR_REG(BaseAdd) = (SPI_SR_EOQF_MASK
| SPI_SR_TFUF_MASK
| SPI_SR_TFFF_MASK
| SPI_SR_RFOF_MASK
| SPI_SR_RFDF_MASK);
SPI_MCR_REG(BaseAdd) |= SPI_MCR_CLR_TXF_MASK //Clear the Tx FIFO counter.
| SPI_MCR_CLR_RXF_MASK; //Clear the Rx FIFO counter.
return(data);
}
回复第 16 楼 于2013-08-20 11:20:17发表:
好的,有什么后续问题,欢迎提出。
SPI的接收同样需要master 发出一个空的数据,否则slave是无法把数据发给master的。
另外SPI的收发是同时进行的。
这样看来用一个传输的函数就可以实现SPI收发的功能。
SPI_PUSHR [CONT]位用以控制SPI通信过程中片选线是否一直保持有效。
|
|