void spi_init(void) { /*lint -e718*/ /********开始配置spi**************/ /*使能主机所在SSI端口 */ SysCtlPeripheralEnable(MASTER_PERIPH_SSI); /*使能主机所在的GPIO端口*/ SysCtlPeripheralEnable(MASTER_PERIPH_GPIO); /*GPIO数字功能选择SSI功能*/ GPIOPinConfigure(MASTER_SSI_CLK_PIN); GPIOPinConfigure(MASTER_SSI_FSS_PIN); GPIOPinConfigure(MASTER_SSI_RX_PIN); GPIOPinConfigure(MASTER_SSI_TX_PIN); /*主机所在GPIO引脚设置*/ GPIOPinTypeSSI(MASTER_GPIO_BASE,MASTER_GPIO_PINS); // GPIOPinTypeGPIOInput(GPIO_PORTA_BASE,MASTER_SSI_FSS_PIN); /*主机所在SSI配置:片选低电平有效、时钟上升沿捕获数据,下降沿传输数据、主机模式、250khz、8位数据格式*/ SSIConfigSetExpClk(MASTER_SSI_BASE,SysCtlClockGet(),SSI_FRF_MOTO_MODE_0,SSI_MODE,2000000,8); /*SSI使能*/ SSIEnable(MASTER_SSI_BASE); /********开始配置DMA*************/ /*SSI接收DMA使能*/ SSIDMAEnable(MASTER_SSI_BASE,SSI_DMA_RX); /*串口DMA接收配置*/ uDMAChannelAssign(MASTER_SSI_UDMA_RX_CHANNEL); /*DMA通道外设选择*/ /*关闭dma通道*/ uDMAChannelAttributeDisable(MASTER_SSI_UDMA_RX_CHANNEL, /*DMA通道*/ UDMA_ATTR_ALTSELECT| /*不使用备份控制器*/ UDMA_ATTR_USEBURST| /*brust mode*/ UDMA_ATTR_HIGH_PRIORITY| /*不使用高优先级*/ UDMA_ATTR_REQMASK); /*外设传输请求允许*/ uDMAChannelAttributeEnable(MASTER_SSI_UDMA_RX_CHANNEL, /*DMA通道*/ UDMA_ATTR_USEBURST); /*使用burst请求模式*/ /*dma控制器配置 -> 接收*/ uDMAChannelControlSet(MASTER_SSI_UDMA_RX_CHANNEL| /*DMA通道*/ UDMA_PRI_SELECT, /*使用主控制器*/ UDMA_SIZE_8| /*8bit数据*/ UDMA_SRC_INC_NONE| /*源地址不递增*/ UDMA_DST_INC_8| /*目的地址8字节数据地址递增*/ UDMA_ARB_4); /*仲裁数目64*/ /*DMA传输设置 -> 接收*/ uDMAChannelTransferSet(MASTER_SSI_UDMA_RX_CHANNEL| /*DMA通道 */ UDMA_PRI_SELECT, /*使用主控制器*/ UDMA_MODE_BASIC , /*DMA自动模式*/ (void *)(MASTER_SSI_BASE+SSI_O_DR), /*源地址*/ spi_rx_buf, /*目的地址*/ sizeof(spi_rx_buf)); /*传输字节个数*/ uDMAChannelEnable(MASTER_SSI_UDMA_RX_CHANNEL); /*启动DMA接收 */ /********开始配置DMA*************/ /*SSI发送DMA使能*/ SSIDMAEnable(MASTER_SSI_BASE,SSI_DMA_TX); /*串口DMA发送配置*/ uDMAChannelAssign(MASTER_SSI_UDMA_TX_CHANNEL); /*DMA通道外设选择*/ /*关闭dma通道*/ uDMAChannelAttributeDisable(MASTER_SSI_UDMA_TX_CHANNEL, /*DMA通道*/ UDMA_ATTR_ALTSELECT| /*不使用备份控制器*/ UDMA_ATTR_USEBURST| /*brust mode*/ UDMA_ATTR_HIGH_PRIORITY| /*不使用高优先级*/ UDMA_ATTR_REQMASK); /*外设传输请求允许*/ uDMAChannelAttributeEnable(MASTER_SSI_UDMA_TX_CHANNEL, /*DMA通道*/ UDMA_ATTR_USEBURST); /*使用burst请求模式*/ /*dma控制器配置 -> 发送*/ uDMAChannelControlSet(MASTER_SSI_UDMA_TX_CHANNEL| /*DMA通道*/ UDMA_PRI_SELECT, /*使用主控制器*/ UDMA_SIZE_8| /*8bit数据*/ UDMA_SRC_INC_8| /*源地址递增*/ UDMA_DST_INC_NONE| /*目的地址不递增*/ UDMA_ARB_4); /*仲裁数目1*/ /*DMA传输设置 -> 发送*/ uDMAChannelTransferSet(MASTER_SSI_UDMA_TX_CHANNEL| /*DMA通道 */ UDMA_PRI_SELECT, /*使用主控制器*/ UDMA_MODE_BASIC , /*DMA自动模式*/ spi_tx_buf, /*源地址*/ (void *)(MASTER_SSI_BASE+SSI_O_DR), /*目的地址*/ sizeof(spi_tx_buf)); /*传输字节个数*/ uDMAChannelEnable(MASTER_SSI_UDMA_TX_CHANNEL); /*启动DMA发送*/ /*lint +e718*/ }