|
我想实现在TLC6748EasyEVM利用双SPI口进行数据对传,打算使用两路SPI总线中断来实现数据的收发。我把SPI0与SPI1的时钟线,MISO,MOSI,片选线对连起来,使用SPI1作为MASTER发送数据,SPI0作为SLAVE接收数据,代码经过编译可以运行,但是不见中断产生,不知道问题出在哪。 请各路大神帮忙看下我改的测试代码有没有什么问题,谢谢!!!
(附件里有我的源码)
/****************************************************************************/
/* */
/* 双SPI口 对传测试 */
/* */
/* 2018年06月15日 */
/* */
/****************************************************************************/
#include "TL6748.h" // 创龙 DSP6748 开发板相关声明
#include "soc_C6748.h"
#include "hw_psc_C6748.h"
#include "uart.h"
#include "spi.h"
#include "psc.h"
#include "uartStdio.h"
#include "interrupt.h"
#include <string.h>
#include "spi0.h"//------------
/****************************************************************************/
/* */
/* 宏定义 */
/* */
/****************************************************************************/
// SPI 管脚配置
#define SIMO_SOMI_CLK_CS 0x00000E01
#define CHAR_LENGTH 0x8
// FLASH 地址
#define SPI_FLASH_ADDR_MSB1 0x0A
#define SPI_FLASH_ADDR_MSB0 0x00
#define SPI_FLASH_ADDR_LSB 0x00
// 扇区擦除命令
#define SPI_FLASH_SECTOR_ERASE 0xD8
// 页写入命令
#define SPI_FLASH_PAGE_WRITE 0x02
// 读状态寄存器命令
#define SPI_FLASH_STATUS_RX 0x05
// 写使能命令
#define SPI_FLASH_WRITE_EN 0x06
// 读命令
#define SPI_FLASH_READ 0x03
// 写操作执行中
#define WRITE_IN_PROGRESS 0x01
/****************************************************************************/
/* */
/* 全局变量 */
/* */
/****************************************************************************/
volatile unsigned int flag = 1;
volatile unsigned int flag0 = 1;
unsigned int tx_len;
unsigned int rx_len;
unsigned char vrf_data[260];
unsigned char tx_data[260];
unsigned char rx_data[260];
unsigned char *p_tx;
unsigned char *p_rx;
/****************************************************************************/
/* */
/* 函数声明 */
/* */
/****************************************************************************/
void PSCInit(void);
void GPIOBankPinMuxSet(void);
void SPI1DataFormatConfig(unsigned int dataFormat);
//void ReadFromFlash(void);
//void IsFlashBusy(void);
void WritetoFlash(void);
void WriteEnable(void);
void Spi1Transfer(void);
//void SectorErase(void);
int VerifyData(void);
void StatusGet(void);
void SPIInit(void);
void InterruptInit(void);
void SPI0InterruptInit(void);
void SPI0Isr(void);
void SPI1InterruptInit(void);
void SPI1Isr(void);
/****************************************************************************/
/* */
/* 主函数 */
/* */
/****************************************************************************/
int main(void)
{
PSCInit();
GPIOBankPinMuxSet();// GPIO 管脚复用配置
// 初始化串口终端 使用串口2
UARTStdioInit();
UARTPuts("Tronlong SPI Flash Application......\r\n", -1);
// 管脚复用配置
GPIOBankPinMuxSet();
// DSP 中断初始化
InterruptInit();
// SPI1 中断初始化
SPI1InterruptInit();
// SPI1 初始化
SPIInit();//时钟速度:20000000 片选:1
SPI0InterruptInit();
SPI0Setup(1, 8);// SPI0设置
//-----------------------------------------
unsigned int index;
tx_data[0] = 55;
tx_data[1] = 0xAA;
tx_data[2] = 55;
tx_data[3] = 0xAA;
// 准备要写入的数据
for (index = 4; index < 260; index++)
{
tx_data[index] = index;
}
for(index = 4; index < 260; index++)
{
vrf_data[index] = index;
}
tx_len = rx_len = index;
SPIIntEnable(SOC_SPI_0_REGS, (SPI_RECV_INT | SPI_TRANSMIT_INT));//使能中断
SPIDat1Config(SOC_SPI_1_REGS, (SPI_CSHOLD | SPI_DATA_FORMAT0), 0x1);
// Spi1Transfer();
// SPIDat1Config(SOC_SPI_0_REGS, SPI_DATA_FORMAT0, 0x1);
printf("tx_len = %d \n",tx_len);
while(tx_len)//发送buff空中断
{
tx_len--;
SPITransmitData1(SOC_SPI_1_REGS, *p_tx);//发送数据
p_tx++;
if (!tx_len)
{
break;
}
}
SPIDat1Config(SOC_SPI_1_REGS, SPI_DATA_FORMAT0, 0x1);
for(;;)
{
}
}
/****************************************************************************/
/* */
/* PSC 初始化 */
/* */
/****************************************************************************/
void PSCInit(void)
{
// 对相应外设模块的使能也可以在 BootLoader 中完成
// 使能 SPI 模块
PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_SPI1, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);
}
/****************************************************************************/
/* */
/* GPIO 管脚复用配置 */
/* */
/****************************************************************************/
void GPIOBankPinMuxSet(void)
{
SPIPinMuxSetup(1);//猜此处输入为使用的SPI端口号
SPI1CSPinMuxSetup(0);//SPI片选信号
}
/****************************************************************************/
/* */
/* 读状态寄存器 */
/* */
/****************************************************************************/
void StatusGet(void)//获取flash状态
{
tx_data[0] = SPI_FLASH_STATUS_RX;
tx_len = rx_len = 2;
SPIDat1Config(SOC_SPI_1_REGS, (SPI_CSHOLD | SPI_DATA_FORMAT0), 0x1);
Spi1Transfer();
}
/****************************************************************************/
/* */
/* 写使能 */
/* */
/****************************************************************************/
void WriteEnable(void)
{
tx_data[0] = SPI_FLASH_WRITE_EN;
tx_len = rx_len = 1;
SPIDat1Config(SOC_SPI_1_REGS, (SPI_CSHOLD | SPI_DATA_FORMAT0), 0x1);
Spi1Transfer();
}
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
|