1. 目前最大的疑问是OMAPL138和DSP6748的DSP部分是完全一样的吗(虽然知道芯片完全是引脚兼容的)?因此现在使用OMAPL138的DSP内核去读写一下外部的SPI FLASH芯片,先看下原理图,可惜创龙核心板的原理图不开源,所以我肯定不买他们家的板子
2. 尤其是startware这个软件库,究竟是用在ARM还是DSP的怎么区分?看资料ARM似乎可以唤醒DSP核?
3. 心血来潮,测试一下,同一个工程是不是可以同时用在ARM和DSP内核上,只是用不用的GEL文件。经过测试发现,如果建立的工程,选的器件是DSP6748,那么生成的.out文件可以用于DSP核,如果选择的是ARM-OMAPL138那么生成的.out用于ARM核,原来是建立工程的时候选择是ARM核还是DSP核
4. 言归正传,本来是搞SPI FLASH的,话题跑远了
void SPIInterruptInit(void) { // 注册中断服务函数 IntRegister(C674X_MASK_INT4, SPIIsr); // 映射中断事件 IntEventMap(C674X_MASK_INT4, SYS_INT_SPI1_INT); // 使能可屏蔽中断 IntEnable(C674X_MASK_INT4); } /****************************************************************************/ /* */ /* SPI 初始化 */ /* */ /****************************************************************************/ void SPIInit(void) { unsigned char cs = 0x01; unsigned char dcs = 0x01; unsigned int val = SIMO_SOMI_CLK_CS; SPIReset(SOC_SPI_1_REGS); SPIOutOfReset(SOC_SPI_1_REGS); SPIModeConfigure(SOC_SPI_1_REGS, SPI_MASTER_MODE); SPIClkConfigure(SOC_SPI_1_REGS, 228000000, 20000000, SPI_DATA_FORMAT0); SPIPinControl(SOC_SPI_1_REGS, 0, 0, &val); SPIDefaultCSSet(SOC_SPI_1_REGS, dcs); // 配置 SPI 数据格式 SPIDataFormatConfig(SPI_DATA_FORMAT0); // 配置 SPI 数据格式及片选信号 SPIDat1Config(SOC_SPI_1_REGS, (SPI_CSHOLD | SPI_DATA_FORMAT0), cs); // 映射中断到 INT1 SPIIntLevelSet(SOC_SPI_1_REGS, SPI_RECV_INTLVL | SPI_TRANSMIT_INTLVL); // 使能 SPI SPIEnable(SOC_SPI_1_REGS); } /****************************************************************************/ /* */ /* 配置 SPI 数据格式 */ /* */ /****************************************************************************/ void SPIDataFormatConfig(unsigned int dataFormat) { // 配置 SPI 时钟 SPIConfigClkFormat(SOC_SPI_1_REGS, (SPI_CLK_POL_HIGH | SPI_CLK_INPHASE), dataFormat); // 配置 SPI 发送时 MSB 优先 SPIShiftMsbFirst(SOC_SPI_1_REGS, dataFormat); // 设置字符长度 SPICharLengthSet(SOC_SPI_1_REGS, CHAR_LENGTH, dataFormat); } /****************************************************************************/ /* */ /* SPI 传输 */ /* */ /****************************************************************************/ void SpiTransfer(void) { p_tx = &tx_data[0]; p_rx = &rx_data[0]; SPIIntEnable(SOC_SPI_1_REGS, (SPI_RECV_INT | SPI_TRANSMIT_INT)); while(flag); flag = 1; SPIDat1Config(SOC_SPI_1_REGS, SPI_DATA_FORMAT0, 0x1); } /****************************************************************************/ /* */ /* SPI 中断服务函数 */ /* */ /****************************************************************************/ void SPIIsr(void) { unsigned int intCode = 0; IntEventClear(SYS_INT_SPI1_INT); intCode = SPIInterruptVectorGet(SOC_SPI_1_REGS); while (intCode) { if(intCode == SPI_TX_BUF_EMPTY) { tx_len--; SPITransmitData1(SOC_SPI_1_REGS, *p_tx); p_tx++; if (!tx_len) { SPIIntDisable(SOC_SPI_1_REGS, SPI_TRANSMIT_INT); } } if(intCode == SPI_RECV_FULL) { rx_len--; *p_rx = (char)SPIDataReceive(SOC_SPI_1_REGS); p_rx++; if (!rx_len) { flag = 0; SPIIntDisable(SOC_SPI_1_REGS, SPI_RECV_INT); } } intCode = SPIInterruptVectorGet(SOC_SPI_1_REGS); } }
来源:https://www.cnblogs.com/429512065qhq/p/9637594.html