创龙TMS320C6748开发板———SPI接口配置
来源:互联网 发布:手机怎么投诉淘宝卖家 编辑:程序博客网 时间:2024/05/19 12:38
最近一段时间忙着考试,没留意试用报告分享时间是到20号~先说声抱歉了
先把程序放上来供大家参考,等考完试我再把相关寄存器配置说明补上~~~再说声抱歉
这部分介绍SPI接口配置,这个接口主要用于传输串行数据,在AD、DA采集和波形转换上非常常用,最后附一个使用SPI接口发送数据的例程。
一、SPI接口简介
二、SPI接口寄存器介绍
(稍后再补)
三、基于CSLr的SPI数据发送例程
1、SPI初始化配置程序
extern void setup_SPI1( )//
{
spiRegs->SPIGCR0= (CSL_SPI_SPIGCR0_RESET_IN_RESET <<CSL_SPI_SPIGCR0_RESET_SHIFT);//寄存器复位
delay(10);
spiRegs->SPIGCR0= (CSL_SPI_SPIGCR0_RESET_OUT_OF_RESET <<CSL_SPI_SPIGCR0_RESET_SHIFT);//寄存器脱离复位
spiRegs->SPIGCR1= (
(CSL_SPI_SPIGCR1_CLKMOD_INTERNAL <<CSL_SPI_SPIGCR1_CLKMOD_SHIFT)|
(CSL_SPI_SPIGCR1_MASTER_MASTER<<CSL_SPI_SPIGCR1_MASTER_SHIFT)
//|(CSL_SPI_SPIGCR1_LOOPBACK_ENABLE<<CSL_SPI_SPIGCR1_LOOPBACK_SHIFT)
);//Mater模式
spiRegs->SPIPC0= (
(CSL_SPI_SPIPC0_SOMIFUN_SPI <<CSL_SPI_SPIPC0_SOMIFUN_SHIFT)|
(CSL_SPI_SPIPC0_SIMOFUN_SPI <<CSL_SPI_SPIPC0_SIMOFUN_SHIFT)|
(CSL_SPI_SPIPC0_CLKFUN_SPI <<CSL_SPI_SPIPC0_CLKFUN_SHIFT)
// |(CSL_SPI_SPIPC0_ENAFUN_SPI<<CSL_SPI_SPIPC0_ENAFUN_SHIFT)
|(CSL_SPI_SPIPC0_SCS0FUN1_SHIFT<<CSL_SPI_SPIPC0_SCS0FUN1_SPI )
);//4PIN,使能片选
spiRegs->SPIFMT[0] = CSL_FMK(SPI_SPIFMT_CHARLEN,0x10)
| CSL_FMK(SPI_SPIFMT_PRESCALE,5)//工作在35MHz
| CSL_FMK(SPI_SPIFMT_PHASE,0)
| CSL_FMK(SPI_SPIFMT_POLARITY,1);
// spiRegs->SPIINT0= (CSL_SPI_SPIINT0_RXINTENA_ENABLE<<CSL_SPI_SPIINT0_RXINTENA_SHIFT);
// spiRegs->SPIDEF= (CSL_SPI_SPIDEF_CSDEF0_LOW<<CSL_SPI_SPIDEF_CSDEF0_SHIFT);
// spiRegs->SPIFMT[0]= (CSL_SPI_SPIFMT_SHIFTDIR_MSB <<CSL_SPI_SPIFMT_SHIFTDIR_SHIFT);
// SETBIT(spiRegs->SPIFMT[0], (29 << 8)|(16<<0));//SPICLK=420/2/(29+1),16Bit
// spiRegs->SPILVL = (CSL_SPI_SPILVL_RXINTLVL_INT1<<CSL_SPI_SPILVL_RXINTLVL_SHIFT);
spiRegs->SPIDELAY= ((16 <<CSL_SPI_SPIDELAY_T2CDELAY_SHIFT)
|(16 <<CSL_SPI_SPIDELAY_T2EDELAY_SHIFT)
|(16 <<CSL_SPI_SPIDELAY_C2TDELAY_SHIFT)
|(16 <<CSL_SPI_SPIDELAY_C2EDELAY_SHIFT)
);
spiRegs->SPIGCR1 |= CSL_FMK(SPI_SPIGCR1_ENABLE,0x01);
}
2、SPI数据发送函数
void SPI_Transfer(Uint16 *SPI_SRC,Uint16 *SPI_DST)//数据回传函数
{
int ii;
for(ii=0;ii<256;ii++)
{
while (CHKBIT(spiRegs->SPIBUF, 0x20000000))
{
;
}
CSL_FINS(spiRegs->SPIDAT0,SPI_SPIDAT1_TXDATA,*SPI_SRC++);
delay(30);//稍加延时
*SPI_DST++=CSL_FEXT(spiRegs->SPIBUF,SPI_SPIBUF_RXDATA);
}
}
3、主函数
void main(void)
{
setup_SPI1();//配置SPI接口
asm("nop");
for(kk=0;kk<256;kk++)
{
SRC[kk]=kk;
}
SPI_Transfer(&SRC[0],&DST[0]);
while(1);
}
先把程序放上来供大家参考,等考完试我再把相关寄存器配置说明补上~~~再说声抱歉
这部分介绍SPI接口配置,这个接口主要用于传输串行数据,在AD、DA采集和波形转换上非常常用,最后附一个使用SPI接口发送数据的例程。
一、SPI接口简介
SPI(Serial Peripheral Interface,串行外设接口)是Motorola公司提出的一种同步串行数据传输标准,在很多器件中被广泛应用。SPI接口经常被称为4线串行总线,以主/从方式工作,数据传输过程由主机初始化。
1)SCLK:串行时钟,用来同步数据传输,由主机输出;
2) MOSI:主机输出从机输入数据线;
3) MISO:主机输入从机输出数据线;
4) SCS:片选线,低电平有效,由主机输出。
在SPI总线上,某一时刻可以出现多个从机,但只能存在一个主机,主机通过片选线来确定要通信的从机。这就要求从机的MISO口具有三态特性,使得该口线在器件未被选通时表现为高阻抗。
1、SPI 硬件IO资源,通信时需要用到的管脚:
由上图可以看到SPI接口简单,最多需要五根控制线就可以完成数据传递。SIMO:从机模式下串行数据输入;SOMI:主机模式下串行输出;CLK:时钟信号;SCS:片选信号;ENA:从机模式下指示从机就绪。
2、SPI 操作模式
无论是主机模式还是从机模式,SPI接口支持以下通信模式:
• 3-pin option[最简单模式]
• 4-pin withchip select option[多了SCS片选信号,可使用一根SPI总线完成多从机设备的支持]
• 4-pin withenable option[增加了ENA引脚,通过硬件握手增加了数据的吞吐量]
• 5-pin withenable and chip select option
3、时钟相位及极性
1、3模式时钟信号没有延迟。
此外,有上图我们还可以看到,在一个SPI时钟周期内,会完成如下操作:
1) 主机通过MOSI线发送1位数据,从机通过该线读取这1位数据;
2) 从机通过MISO线发送1位数据,主机通过该线读取这1位数据。
这是通过移位寄存器来实现的。主机和从机各有一个移位寄存器,且二者连接成环。随着时钟脉冲,数据按照从高位到低位的方式依次移出主机寄存器和从机寄存器,并且依次移入从机寄存器和主机寄存器。当寄存器中的内容全部移出时,相当于完成了两个寄存器内容的交换。
4、数据模式
发送数据和接收数据支持2~16位,通过寄存器SPIFMTn.CHARLEN配置。发送数据格式为右对齐,高位任意,发送数据存储在SPIDAT1寄存器中;接收数据格式为右对齐,高位补零至16位,发送数据存储在SPIBUF寄存器中;数据串行发送方向由SPIFMTn.SHIFTDIR决定,当其为0时,发送数据从MSB至LSB发送,当其为1时,发送数据从LSB至MSB发送。
(稍后再补)
三、基于CSLr的SPI数据发送例程
1、SPI初始化配置程序
extern void setup_SPI1( )//
{
spiRegs->SPIGCR0= (CSL_SPI_SPIGCR0_RESET_IN_RESET <<CSL_SPI_SPIGCR0_RESET_SHIFT);//寄存器复位
delay(10);
spiRegs->SPIGCR0= (CSL_SPI_SPIGCR0_RESET_OUT_OF_RESET <<CSL_SPI_SPIGCR0_RESET_SHIFT);//寄存器脱离复位
spiRegs->SPIGCR1= (
(CSL_SPI_SPIGCR1_CLKMOD_INTERNAL <<CSL_SPI_SPIGCR1_CLKMOD_SHIFT)|
(CSL_SPI_SPIGCR1_MASTER_MASTER<<CSL_SPI_SPIGCR1_MASTER_SHIFT)
//|(CSL_SPI_SPIGCR1_LOOPBACK_ENABLE<<CSL_SPI_SPIGCR1_LOOPBACK_SHIFT)
);//Mater模式
spiRegs->SPIPC0= (
(CSL_SPI_SPIPC0_SOMIFUN_SPI <<CSL_SPI_SPIPC0_SOMIFUN_SHIFT)|
(CSL_SPI_SPIPC0_SIMOFUN_SPI <<CSL_SPI_SPIPC0_SIMOFUN_SHIFT)|
(CSL_SPI_SPIPC0_CLKFUN_SPI <<CSL_SPI_SPIPC0_CLKFUN_SHIFT)
// |(CSL_SPI_SPIPC0_ENAFUN_SPI<<CSL_SPI_SPIPC0_ENAFUN_SHIFT)
|(CSL_SPI_SPIPC0_SCS0FUN1_SHIFT<<CSL_SPI_SPIPC0_SCS0FUN1_SPI )
);//4PIN,使能片选
spiRegs->SPIFMT[0] = CSL_FMK(SPI_SPIFMT_CHARLEN,0x10)
| CSL_FMK(SPI_SPIFMT_PRESCALE,5)//工作在35MHz
| CSL_FMK(SPI_SPIFMT_PHASE,0)
| CSL_FMK(SPI_SPIFMT_POLARITY,1);
// spiRegs->SPIINT0= (CSL_SPI_SPIINT0_RXINTENA_ENABLE<<CSL_SPI_SPIINT0_RXINTENA_SHIFT);
// spiRegs->SPIDEF= (CSL_SPI_SPIDEF_CSDEF0_LOW<<CSL_SPI_SPIDEF_CSDEF0_SHIFT);
// spiRegs->SPIFMT[0]= (CSL_SPI_SPIFMT_SHIFTDIR_MSB <<CSL_SPI_SPIFMT_SHIFTDIR_SHIFT);
// SETBIT(spiRegs->SPIFMT[0], (29 << 8)|(16<<0));//SPICLK=420/2/(29+1),16Bit
// spiRegs->SPILVL = (CSL_SPI_SPILVL_RXINTLVL_INT1<<CSL_SPI_SPILVL_RXINTLVL_SHIFT);
spiRegs->SPIDELAY= ((16 <<CSL_SPI_SPIDELAY_T2CDELAY_SHIFT)
|(16 <<CSL_SPI_SPIDELAY_T2EDELAY_SHIFT)
|(16 <<CSL_SPI_SPIDELAY_C2TDELAY_SHIFT)
|(16 <<CSL_SPI_SPIDELAY_C2EDELAY_SHIFT)
);
spiRegs->SPIGCR1 |= CSL_FMK(SPI_SPIGCR1_ENABLE,0x01);
}
2、SPI数据发送函数
void SPI_Transfer(Uint16 *SPI_SRC,Uint16 *SPI_DST)//数据回传函数
{
int ii;
for(ii=0;ii<256;ii++)
{
while (CHKBIT(spiRegs->SPIBUF, 0x20000000))
{
;
}
CSL_FINS(spiRegs->SPIDAT0,SPI_SPIDAT1_TXDATA,*SPI_SRC++);
delay(30);//稍加延时
*SPI_DST++=CSL_FEXT(spiRegs->SPIBUF,SPI_SPIBUF_RXDATA);
}
}
3、主函数
void main(void)
{
setup_SPI1();//配置SPI接口
asm("nop");
for(kk=0;kk<256;kk++)
{
SRC[kk]=kk;
}
SPI_Transfer(&SRC[0],&DST[0]);
while(1);
}
0 0
- 创龙TMS320C6748开发板———SPI接口配置
- 创龙TMS320C6748开发板———GPIO配置深入
- 创龙TMS320C6748开发板———uPP配置
- 创龙TMS320C6748开发板———PSC配置及GPIO介绍
- 创龙TMS320C6748开发板———中断介绍(2)中断向量表配置及说明
- 创龙TMS320C6748开发板———EDMA简介及配置
- 创龙TMS320C6748开发板———Timer配置 + Timer触发中断 + GPIO控制LED闪烁
- 创龙TMS320C6748开发板———定时器/计数器学习
- 创龙TMS320C6748开发板———按键中断学习
- 创龙TMS320C6748开发板———UART原理(1)
- 创龙TMS320C6748开发板———PLL模块和PINMUX说明
- 创龙TMS320C6748开发板———中断介绍(1)中断及中断相关寄存器
- 创龙TMS320C6748开发板———UART寄存器介绍及程序
- 创龙TMS320C6748开发板———设备时钟介绍1
- 创龙TMS320C6748开发板———设备时钟介绍2
- 创龙TMS320C6748开发板———设备时钟介绍3
- 【创龙TMS320C6748开发板试用】+ 中断学习
- 【创龙TMS320C6748开发板试用】+ 定时器
- 奖学金pascal程序
- 创龙TMS320C6748开发板———Timer配置 + Timer触发中断 + GPIO控制LED闪烁
- Ubuntu16.04配置PHP开发环境
- 快速幂
- Android蓝牙搜索设备,向其发送数据并接收
- 创龙TMS320C6748开发板———SPI接口配置
- Linux的进程优先级 NI 和 PR
- 算法训练 6-1 递归求二项式系数值
- vim-6 执行shell命令、文件另存为、合并文件和打开多个文件
- win7下安装ubutun双系统
- IEEE浮点数表示
- SICP 2.30 && 2.31square_list (树的平方映射)
- 2017.1.13训练总结
- POJ 1442 Black Box(第k次询问第k小,两个堆)