当前位置:首页 > 单片机 > 单片机
[导读] 打算使用TI公司的CC2530控制TI的电压芯片DAC081S101,需要用到SPI模块。因为我的开发板只能测试UART1对应的IO口,因此做了下面的测试。TI论坛提供的spi文档:http://www.ti.com.cn/cn/lit/an/swra223a/s

打算使用TI公司的CC2530控制TI的电压芯片DAC081S101,需要用到SPI模块。因为我的开发板只能测试UART1对应的IO口,因此做了下面的测试。

TI论坛提供的spi文档:

http://www.ti.com.cn/cn/lit/an/swra223a/swra223a.pdf

1. 两个CC2430测试,一个作为master,一个作为slave

代码完全使用TI 的SPI文档中的code,slave采用中断接收的方式,收到数据之后通过UART0发送到电脑上查看数据,完全正确。

注意事项:

*接线,非常重要。

Master的MOSI接Slave的MOSI; Master的MISO接Slave 的MISO;千万不要交叉接线,这个和UART通信不同。

*slave接收

中断接收和查询接收都没有问题,读缓存之前不需要向U1DBUF里写无效数据,这个应该只针对Master读数据的情况。

其他只要认真阅读文档就不会有问题的。

* Master发送数据注意延时

每发送完一个数据要做一定的延时,使得数据能完全移送到移位寄存器里面。

比如:


SSN0=LOW;
for(int i=0;i{
U0DBUF=*pbuf;
pbuf++;
while(U0TX_BYTE==0);
Delay_ms(10);
U0CSR &= 0xFD;
}
SSN0=HIGH;




* 同时该测试说明一个问题,即两个相同电压的SPI模块是可以直连的。



2. CC2430控制DAC081S101

采用UART0作为Master控制数模转换芯片,选用备选引脚1.即p0_2,p0_3,p0_5为外设引脚,p_4为片选引脚。

初始化

MASTER:

PERCFG&=0xFE;
P0SEL|=0x2C; // P0_2,p0_3,p0_5 are peripherals, that is MISO,MOST,SCK .
P0SEL&=~0x10; //P0_4 is GPIO(SSN)


P0DIR|=0x10;//SSN is set as output

U0CSR &= ~0xA0; //SPI MAster Mode

U0BAUD = 0x3B;
U0GCR|=0x07;

U0GCR|=0xC0;// CPOL = CPHA = 1

U0GCR |= 0x20;

SLAVE:

P0SEL|=0x3C; //P0_2,p0_3,p0_4,p0_5 are peripherals
U0CSR &= ~0x80; //SPI mode
U0CSR |= 0x20; //slave mode

U0BAUD = 0x3B;
U0GCR|=0x07;

U0GCR|=0xC0;// CPOL = CPHA = 1

U0GCR |= 0x20;

TCON &= ~0x08;

URX0IE = 1;

EA=1;

发送:

for(int i=0;i{
SSN0=LOW;
U0DBUF=0x32;

while(U0TX_BYTE==0);
Delay_ms(10);
U0CSR &= 0xFD;
SSN0=HIGH;

}


中断接收:

#pragma vector = URX0_VECTOR


__interrupt void HalSPISlave0IRQ(void)


{


TCON&=~0x08;
rxBufferSlave0[bufferIndex0++]=U0DBUF;
HalUARTWrite(HAL_UART_PORT_0, rxBufferSlave0, 10);

if(bufferIndex0==(RX_SlAVEBUFFER_NUMBER+1))
{
bufferIndex0=0;
for(int i=0;i rxBufferSlave0[i]=0;
}


}


本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除( 邮箱:macysun@21ic.com )。
换一批
延伸阅读
关闭