DSP初学者:SPI初始化程序详解

需积分: 48 3 下载量 157 浏览量 更新于2024-09-15 收藏 44KB DOC 举报
"这篇资源是关于SPI初始化程序的示例代码,主要针对TI公司的DSP处理器。SPI(Serial Peripheral Interface)是一种常见的串行通信接口,用于连接微控制器与各种外设。该程序包括两个函数:`spi_fifo_init()` 和 `spi_init()`,用于设置SPI FIFO寄存器和SPI控制寄存器等,以实现SPI接口的初始化。同时,资源中还包含了一个简单的延时函数`delay_loop()`以及一个错误处理函数`error()`。" 在TI的DSP处理器中,SPI初始化涉及到多个步骤和寄存器配置。以下是对`spi_fifo_init()` 和 `spi_init()`函数的详细解释: 1. **`spi_fifo_init()`**: - `SpiaRegs.SPIFFTX.all=0xE040;`:这是对SPI发送FIFO(First In First Out,先进先出)寄存器的初始化。0xE040的值可能意味着设置了FIFO的工作模式、水位阈值以及其他相关的控制位。 - `SpiaRegs.SPIFFRX.all=0x2044;`:这里是接收FIFO的初始化。0x2044可能表示接收FIFO的读写位置、中断触发条件等。 - `SpiaRegs.SPIFFCT.all=0x0;`:SPI FIFO控制寄存器清零,可能用于清除FIFO状态或设定默认操作。 2. **`spi_init()`**: - `SpiaRegs.SPICCR.all =0x000F;`:配置SPI控制和计数寄存器(SPICCR),设置SPI处于复位状态,选择上升沿采样,16位字符传输。 - `SpiaRegs.SPICTL.all =0x0006;`:初始化SPI控制寄存器(SPICTL),启用主模式,正常相位,允许发送,并禁用SPI中断。 - `SpiaRegs.SPIBRR =0x007F;`:设置SPI波特率寄存器(SPIBRR),这将决定SPI通信的速度。0x007F表示特定的时钟分频系数。 - `SpiaRegs.SPICCR.all =0x009F;`:解除SPI的复位状态。 - `SpiaRegs.SPIPRI.bit.FREE = 1;`:设置SPI优先级寄存器中的FREE位,确保调试过程中的断点不会中断传输。 此外,代码中还包括了一个简单的延时函数`delay_loop()`,通过循环计数实现。在实际应用中,通常会使用更精确的延时函数,如定时器中断或RTOS中的延时服务。 错误处理函数`error()`则通过调用汇编指令`ESTOP0`停止系统,并进入无限循环,这通常用于测试失败时的紧急停机。 最后,资源中提到的`InitSysCtrl()`函数是系统控制初始化,它涉及到了看门狗的禁用、ADC(模拟数字转换器)时钟的启用和校准。在调试过程中,如果跳过了BootROM,必须手动调用`Device_cal()`函数来校准ADC和振荡器,以确保它们按照规格工作。这个函数还涉及到选择内部振荡器1作为时钟源并关闭未使用的时钟,以节省电源。