主题中讨论的其他器件: HALCOGEN
您好!
我使用 HALCOGEN 为 TMS470MF06607生成 SPI 代码。 生成代码后、我将使用 CCS 将代码刷写到 TMS470MF06607 lanchpad 中。
但我面临芯片选择问题、这里的芯片选择是自动启用和禁用的。
我需要知道如何 在需要时启用和禁用芯片选择。
请帮助解决此问题、在此我附上了代码、请检查。
**在这里,我在主模式下启用了 SPI。
谢谢。
//spi.c
#include "spi.h"
void spiInit (void)
{
sint32 i;
/**@b 初始化@b MIBSPI1 */
/**使 SPI 退出复位*/
spiREG1->GCR0 = 1U;
/**启用 MIBSPI1多缓冲模式并启用缓冲 RAM */
spiREG1->MIBSPIE =(spiREG1->MIBSPIE & 0xFFFFFFFEU)| 1U;
/** MIBSPI1主模式和时钟配置*/
spiREG1->GCR1 =(spiREG1->GCR1 & 0xFFFFFFFCU)|(1U << 1U)/* CLOKMOD */
| 1U);/*主设备*/
/** MIBSPI1使能引脚配置*/
spiREG1->INT0 =(spiREG1->INT0 & 0xFEFFFFFFU)|(0U <<24U);//启用 HIGHZ */
/**-延迟*/
spiREG1->delay =(2U <<24U)/* C2TDELAY */
|(2U <<16U)/* T2CDELAY */
|(0U << 8U)/* T2EDELAY */
|0U;/* C2EDELAY */
/**-数据格式0 */
spiREG1->FMT0 =(2U <<24U)/* wdelay */
|(0U << 23U)/*奇偶极性*/
|(0U << 22U)/*奇偶校验使能*/
|(0U << 21U)//等待启用
|(0U << 20U)/*换向*/
|(0U << 17U)/*时钟极性*/
|(0U << 16U)/*时钟相位*/
|(79U << 8U)/*波特率预分频*
|8U;/*数据字长度*/
/**-数据格式1 */
spiREG1->FMT1 =(2U <<24U)/* wdelay */
|(0U << 23U)/*奇偶极性*/
|(0U << 22U)/*奇偶校验使能*/
|(0U << 21U)//等待启用
|(0U << 20U)/*换向*/
|(0U << 17U)/*时钟极性*/
|(0U << 16U)/*时钟相位*/
|(79U << 8U)/*波特率预分频*
|8U;/*数据字长度*/
/**-数据格式2 */
spiREG1->FMT2 =(2U <<24U)/* wdelay */
|(0U << 23U)/*奇偶极性*/
|(0U << 22U)/*奇偶校验使能*/
|(0U << 21U)//等待启用
|(0U << 20U)/*换向*/
|(0U << 17U)/*时钟极性*/
|(0U << 16U)/*时钟相位*/
|(79U << 8U)/*波特率预分频*
|8U;/*数据字长度*/
/**-数据格式3 */
spiREG1->FMT3 =(2U <<24U)/* wdelay */
|(0U << 23U)/*奇偶极性*/
|(0U << 22U)/*奇偶校验使能*/
|(0U << 21U)//等待启用
|(0U << 20U)/*换向*/
|(0U << 17U)/*时钟极性*/
|(0U << 16U)/*时钟相位*/
|(79U << 8U)/*波特率预分频*
|8U;/*数据字长度*/
/**-在访问 MibSPI 寄存器之前等待缓冲器初始化完成*/
while ((spiREG1->FLG & 0x01000000U)!= 0U)
{
}/*等待*/
/**-初始化传输组*/
spiREG1->TGCTRL[0U]=(1U << 30U)/* OneShot *
|(0U << 29U)/*当前复位*/
|(TRG_Always << 20U)/*触发事件*/
|(TRG_DISABLED << 16U)/*触发源*/
|(0U << 8U);/*启动缓冲器*/
spiREG1->TGCTRL[1U]=(1U << 30U)/* OneShot */
|(0U << 29U)/*当前复位*/
|(TRG_Always << 20U)/*触发事件*/
|(TRG_DISABLED << 16U)/*触发源*/
|(8U << 8U);/*启动缓冲器*/
spiREG1->TGCTRL[2U]=(1U <<30U)/* OneShot */
|(0U << 29U)/*当前复位*/
|(TRG_Always << 20U)/*触发事件*/
|(TRG_DISABLED << 16U)/*触发源*/
|((8U+8U)<< 8U);/*启动缓冲器*/
spiREG1->TGCTRL[3U]=(1U << 30U)/* OneShot *
|(0U << 29U)/*当前复位*/
|(TRG_Always << 20U)/*触发事件*/
|(TRG_DISABLED << 16U)/*触发源*/
|((8U+8U+8U)<< 8U);/*启动缓冲器*/
spiREG1->TGCTRL[4U]=(1U <<30U)/* OneShot */
|(0U << 29U)/*当前复位*/
|(TRG_Always << 20U)/*触发事件*/
|(TRG_DISABLED << 16U)/*触发源*/
|((8U+8U+8U+8U)<<8U);/*启动缓冲器*/
spiREG1->TGCTRL[5U]=(1U << 30U)/* OneShot *
|(0U << 29U)/*当前复位*/
|(TRG_Always << 20U)/*触发事件*/
|(TRG_DISABLED << 16U)/*触发源*/
|((8U+8U+8U+8U+8U+8U)<<8U);/*启动缓冲器*/
spiREG1->TGCTRL[6U]=(1U << 30U)/* OneShot *
|(0U << 29U)/*当前复位*/
|(TRG_Always << 20U)/*触发事件*/
|(TRG_DISABLED << 16U)/*触发源*/
|((8U+8U+8U+8U+8U+8U+8U)<<8U);//开始缓冲区
spiREG1->TGCTRL[7U]=(1U << 30U)/* OneShot *
|(0U << 29U)/*当前复位*/
|(TRG_Always << 20U)/*触发事件*/
|(TRG_DISABLED << 16U)/*触发源*/
|((8U+8U+8U+8U+8U+8U+8U+8U+8U)<<8U);/*启动缓冲器*/
spiREG1->TGCTRL[8U]=(1U << 30U)/* OneShot *
|(0U << 29U)/*当前复位*/
|(TRG_Always << 20U)/*触发事件*/
|(TRG_DISABLED << 16U)/*触发源*/
|((8U+8U+8U+8U+8U+8U+8U+8U+8U+8)<<8U);/*启动缓冲器*/
spiREG1->TGCTRL[9U]=(1U << 30U)/* OneShot *
|(0U << 29U)/*当前复位*/
|(TRG_Always << 20U)/*触发事件*/
|(TRG_DISABLED << 16U)/*触发源*/
|((8U+8U+8U+8U+8U+8U+8U+8U+8U+8U+0)<<8U);/*启动缓冲器*/
spiREG1->TGCTRL[10U]=(1U << 30U)/* OneShot *
|(0U << 29U)/*当前复位*/
|(TRG_Always << 20U)/*触发事件*/
|(TRG_DISABLED << 16U)/*触发源*/
|((8U+8U+8U+8U+8U+8U+8U+8U+8U+8U+8U+0U+0)<<8U);/*启动缓冲器*/
spiREG1->TGCTRL[11U]=(1U << 30U)/* OneShot *
|(0U << 29U)/*当前复位*/
|(TRG_Always << 20U)/*触发事件*/
|(TRG_DISABLED << 16U)/*触发源*/
|((8U+8U+8U+8U+8U+8U+8U+8U+8U+8U+8U+0U+0)<<8U);/*启动缓冲器*/
spiREG1->TGCTRL[12U]=(1U << 30U)/* OneShot *
|(0U << 29U)/*当前复位*/
|(TRG_Always << 20U)/*触发事件*/
|(TRG_DISABLED << 16U)/*触发源*/
|((8U+8U+8U+8U+8U+8U+8U+8U+8U+8U+8U+0U+0U+0U+0)<<8U);//开始缓冲区
spiREG1->TGCTRL[13U]=(1U << 30U)/* OneShot *
|(0U << 29U)/*当前复位*/
|(TRG_Always << 20U)/*触发事件*/
|(TRG_DISABLED << 16U)/*触发源*/
|((8U+8U+8U+8U+8U+8U+8U+8U+8U+8U+0U+0U+0U+0U+0U+0)<<8U);/*启动缓冲器*/
spiREG1->TGCTRL[14U]=(1U << 30U)/* OneShot *
|(0U << 29U)/*当前复位*/
|(TRG_Always << 20U)/*触发事件*/
|(TRG_DISABLED << 16U)/*触发源*/
|((8U+8U+8U+8U+8U+8U+8U+8U+8U+8U+0U+0U+0U+0U+0U+0U+0)<<8U);/*启动缓冲器*/
spiREG1->TGCTRL[15U]=(1U << 30U)/* OneShot */
|(0U << 29U)/*当前复位*/
|(TRG_Always << 20U)/*触发事件*/
|(TRG_DISABLED << 16U)/*触发源*/
|((8U+8U+8U+8U+8U+8U+8U+8U+8U+8U+0U+0U+0U+0U+0U+0U+0U+0)<<8U);/*启动缓冲器*/
spiREG1->LTGPEND =(spiREG1->LTGPEND & 0xFFFF00FFU)|((8U+8U+8U+8U+8U+8U+8U+8U+8U+0U+0U+0U+0U+0U+0U+0U+0U+0U+0U+0U+1U-)-1U);
/**-初始化缓冲区 RAM */
{
I = 0U;
如果(8U > 0U)
{
while (I <(8U-1U))
{
spiRAM1->TX[i++].control =(4U << 13U)/*缓冲模式*/
|(1U <<12U)/*芯片选择保持*/
|(0U << 11U)/*锁定传输*/
|(0U << 8U)/*数据格式*/
| CS_0;/*芯片选择*/
}
spiRAM1->TX[i++].control =(4U << 13U)/*缓冲模式*/
|(0U << 12U)//对于最后一个缓冲区,芯片选择保持必须为零
|(1U <<10U)/*启用 WDELAY */
|(0U << 8U)/*数据格式*/
| CS_0;/*芯片选择*/
}
如果(8U > 0U)
{
while (I <((8U+8U)-1U))
{
spiRAM1->TX[i++].control =(4U << 13U)/*缓冲模式*/
|(1U <<12U)/*芯片选择保持*/
|(0U << 11U)/*锁定传输*/
|(0U << 8U)/*数据格式*/
| CS_1;/*芯片选择*/
}
spiRAM1->TX[i++].control =(4U << 13U)/*缓冲模式*/
|(0U << 12U)//对于最后一个缓冲区,芯片选择保持必须为零
|(1U <<10U)/*启用 WDELAY */
|(0U << 8U)/*数据格式*/
| CS_1;/*芯片选择*/
}
如果(8U > 0U)
{
while (I <(8U+8U+8U)-1U)
{
spiRAM1->TX[i++].control =(4U << 13U)/*缓冲模式*/
|(1U <<12U)/*芯片选择保持*/
|(0U << 11U)/*锁定传输*/
|(0U << 8U)/*数据格式*/
| CS_2;/*芯片选择*/
}
spiRAM1->TX[i++].control =(4U << 13U)/*缓冲模式*/
|(0U << 12U)//对于最后一个缓冲区,芯片选择保持必须为零
|(1U <<10U)/*启用 WDELAY */
|(0U << 8U)/*数据格式*/
| CS_2;/*芯片选择*/
}
如果(8U > 0U)
{
while (I <(8U+8U+8U+8U)-1U)
{
spiRAM1->TX[i++].control =(4U << 13U)/*缓冲模式*/
|(1U <<12U)/*芯片选择保持*/
|(0U << 11U)/*锁定传输*/
|(0U << 8U)/*数据格式*/
| CS_3;/*芯片选择*/
}
spiRAM1->TX[i++].control =(4U << 13U)/*缓冲模式*/
|(0U << 12U)//对于最后一个缓冲区,芯片选择保持必须为零
|(1U <<10U)/*启用 WDELAY */
|(0U << 8U)/*数据格式*/
| CS_3;/*芯片选择*/
}
如果(8U > 0U)
{
while (I <(8U+8U+8U+8U+8U+8U)-1U)
{
spiRAM1->TX[i++].control =(4U << 13U)/*缓冲模式*/
|(1U <<12U)/*芯片选择保持*/
|(0U << 11U)/*锁定传输*/
|(0U << 8U)/*数据格式*/
| CS_4;/*芯片选择*/
}
spiRAM1->TX[i++].control =(4U << 13U)/*缓冲模式*/
|(0U << 12U)//对于最后一个缓冲区,芯片选择保持必须为零
|(1U <<10U)/*启用 WDELAY */
|(0U << 8U)/*数据格式*/
| CS_4;/*芯片选择*/
}
如果(8U > 0U)
{
while (I <((8U+8U+8U+8U+8U+8U+8U+8U)-1U))
{
spiRAM1->TX[i++].control =(4U << 13U)/*缓冲模式*/
|(1U <<12U)/*芯片选择保持*/
|(0U << 11U)/*锁定传输*/
|(0U << 8U)/*数据格式*/
| CS_5;/*芯片选择*/
}
spiRAM1->TX[i++].control =(4U << 13U)/*缓冲模式*/
|(0U << 12U)//对于最后一个缓冲区,芯片选择保持必须为零
|(1U <<10U)/*启用 WDELAY */
|(0U << 8U)/*数据格式*/
| CS_5;/*芯片选择*/
}
如果(8U > 0U)
{
while (I <((8U+8U+8U+8U+8U+8U+8U+8U+8U)-1U))
{
spiRAM1->TX[i++].control =(4U << 13U)/*缓冲模式*/
|(1U <<12U)/*芯片选择保持*/
|(0U << 11U)/*锁定传输*/
|(0U << 8U)/*数据格式*/
| CS_6;/*芯片选择*/
}
spiRAM1->TX[i++].control =(4U << 13U)/*缓冲模式*/
|(0U << 12U)//对于最后一个缓冲区,芯片选择保持必须为零
|(1U <<10U)/*启用 WDELAY */
|(0U << 8U)/*数据格式*/
| CS_6;/*芯片选择*/
}
如果(8U > 0U)
{
while (I <((8U+8U+8U+8U+8U+8U+8U+8U+8U+8U)-1U))
{
spiRAM1->TX[i++].control =(4U << 13U)/*缓冲模式*/
|(1U <<12U)/*芯片选择保持*/
|(0U << 11U)/*锁定传输*/
|(0U << 8U)/*数据格式*/
| CS_7;/*芯片选择*/
}
spiRAM1->TX[i++].control =(4U << 13U)/*缓冲模式*/
|(0U << 12U)//对于最后一个缓冲区,芯片选择保持必须为零
|(1U <<10U)/*启用 WDELAY */
|(0U << 8U)/*数据格式*/
| CS_7;/*芯片选择*/
}
如果(0 > 0U)
{
while (I <(8U+8U+8U+8U+8U+8U+8U+8U+8U+8U+8U+0U)-1U))
{
spiRAM1->TX[i++].control =(4U << 13U)/*缓冲模式*/
|(1U <<12U)/*芯片选择保持*/
|(0U << 11U)/*锁定传输*/
|(0U << 8U)/*数据格式*/
| CS_7;/*芯片选择*/
}
spiRAM1->TX[i++].control =(4U << 13U)/*缓冲模式*/
|(0U << 12U)//对于最后一个缓冲区,芯片选择保持必须为零
|(0U << 10U)/*启用 WDELAY */
|(0U << 8U)/*数据格式*/
| CS_7;/*芯片选择*/
}
如果(0U > 0U)
{
while (I <((8U+8U+8U+8U+8U+8U+8U+8U+8U+8U+8U+8U+0U)-1U))
{
spiRAM1->TX[i++].control =(4U << 13U)/*缓冲模式*/
|(1U <<12U)/*芯片选择保持*/
|(0U << 11U)/*锁定传输*/
|(0U << 8U)/*数据格式*/
| CS_7;/*芯片选择*/
}
spiRAM1->TX[i++].control =(4U << 13U)/*缓冲模式*/
|(0U << 12U)//对于最后一个缓冲区,芯片选择保持必须为零
|(0U << 10U)/*启用 WDELAY */
|(0U << 8U)/*数据格式*/
| CS_7;/*芯片选择*/
}
如果(0U > 0U)
{
while (I <((8U+8U+8U+8U+8U+8U+8U+8U+8U+8U+8U+8U+0U+0U)-1U))
{
spiRAM1->TX[i++].control =(4U << 13U)/*缓冲模式*/
|(1U <<12U)/*芯片选择保持*/
|(0U << 11U)/*锁定传输*/
|(0U << 8U)/*数据格式*/
| CS_7;/*芯片选择*/
}
spiRAM1->TX[i++].control =(4U << 13U)/*缓冲模式*/
|(0U << 12U)//对于最后一个缓冲区,芯片选择保持必须为零
|(0U << 10U)/*启用 WDELAY */
|(0U << 8U)/*数据格式*/
| CS_7;/*芯片选择*/
}
如果(0U > 0U)
{
while (I <((8U+8U+8U+8U+8U+8U+8U+8U+8U+8U+8U+8U+0U+0U)-1U))
{
spiRAM1->TX[i++].control =(4U << 13U)/*缓冲模式*/
|(1U <<12U)/*芯片选择保持*/
|(0U << 11U)/*锁定传输*/
|(0U << 8U)/*数据格式*/
| CS_7;/*芯片选择*/
}
spiRAM1->TX[i++].control =(4U << 13U)/*缓冲模式*/
|(0U << 12U)//对于最后一个缓冲区,芯片选择保持必须为零
|(0U << 10U)/*启用 WDELAY */
|(0U << 8U)/*数据格式*/
| CS_7;/*芯片选择*/
}
如果(0U > 0U)
{
while (I <((8U+8U+8U+8U+8U+8U+8U+8U+8U+8U+8U+8U+0U+0U+0U+0U)-1U))
{
spiRAM1->TX[i++].control =(4U << 13U)/*缓冲模式*/
|(1U <<12U)/*芯片选择保持*/
|(0U << 11U)/*锁定传输*/
|(0U << 8U)/*数据格式*/
| CS_7;/*芯片选择*/
}
spiRAM1->TX[i++].control =(4U << 13U)/*缓冲模式*/
|(0U << 12U)//对于最后一个缓冲区,芯片选择保持必须为零
|(0U << 10U)/*启用 WDELAY */
|(0U << 8U)/*数据格式*/
| CS_7;/*芯片选择*/
}
如果(0U > 0U)
{
while (I <(8U+8U+8U+8U+8U+8U+8U+8U+8U+8U+8U+0U+0U+0U+0U+0U+0U+0U+0U)-1U))
{
spiRAM1->TX[i++].control =(4U << 13U)/*缓冲模式*/
|(1U <<12U)/*芯片选择保持*/
|(0U << 11U)/*锁定传输*/
|(0U << 8U)/*数据格式*/
| CS_7;/*芯片选择*/
}
spiRAM1->TX[i++].control =(4U << 13U)/*缓冲模式*/
|(0U << 12U)//对于最后一个缓冲区,芯片选择保持必须为零
|(0U << 10U)/*启用 WDELAY */
|(0U << 8U)/*数据格式*/
| CS_7;/*芯片选择*/
}
如果(0U > 0U)
{
while (I <((8U+8U+8U+8U+8U+8U+8U+8U+8U+8U+8U+8U+0U+0U+0U+0U+0U+0U+0U+0U)-1U)))
{
spiRAM1->TX[i++].control =(4U << 13U)/*缓冲模式*/
|(1U <<12U)/*芯片选择保持*/
|(0U << 11U)/*锁定传输*/
|(0U << 8U)/*数据格式*/
| CS_7;/*芯片选择*/
}
spiRAM1->TX[i++].control =(4U << 13U)/*缓冲模式*/
|(0U << 12U)//对于最后一个缓冲区,芯片选择保持必须为零
|(0U << 10U)/*启用 WDELAY */
|(0U << 8U)/*数据格式*/
| CS_7;/*芯片选择*/
}
如果(0U > 0U)
{
while (I <((8U+8U+8U+8U+8U+8U+8U+8U+8U+8U+8U+8U+0U+0U+0U+0U+0U+0U+0U+0U+0U)-1U)))
{
spiRAM1->TX[i++].control =(4U << 13U)/*缓冲模式*/
|(1U <<12U)/*芯片选择保持*/
|(0U << 11U)/*锁定传输*/
|(0U << 8U)/*数据格式*/
| CS_7;/*芯片选择*/
}
spiRAM1->TX[i++].control =(4U << 13U)/*缓冲模式*/
|(0U << 12U)//对于最后一个缓冲区,芯片选择保持必须为零
|(0U << 10U)/*启用 WDELAY */
|(0U << 8U)/*数据格式*/
| CS_7;/*芯片选择*/
}
}
/**-设置中断级别*/
spiREG1->LVL =(0U <<9U)/* TXINT */
|(0U << 8U)/* RXINT */
|(0U << 6U)/* OVRNINT */
|(0U << 4U)/* BITERR */
|(0U << 3U)/* DESYNC */
|(0U << 2U)/* PARERR */
|(0U << 1U)/*超时*/
|(0U);/* DLENERR */
/**-清除所有挂起的中断*/
spiREG1->FLG |= 0xFFFFFFU;
/**-启用中断*/
spiREG1->INT0 =(spiREG1->INT0 & 0xFFFFFF0000U)
|(0U << 9U)/* TXINT */
|(0U << 8U)/* RXINT */
|(0U << 6U)/* OVRNINT */
|(0U << 4U)/* BITERR */
|(0U << 3U)/* DESYNC */
|(0U << 2U)/* PARERR */
|(0U << 1U)/*超时*/
|(0U);/* DLENERR */
/**@b 初始化@b MIBSPI1 @b 端口*/
/**- MIBSPI1端口输出值*/
spiREG1->PCDOUT = 1U /* SCS[0]*/
|(1U << 1U)/* SCS[1]*/
|(1U <<2U)/* SCS[2]*/
|(1U << 3U)/* SCS[3]*/
|(1U << 4U)/* SCS[4]*/
|(1U <<5U)/* SCS[5]*/
|(1U <<6U)/* SCS[6]*/
|(1U <<7U)/* SCS[7]*/
|(0U << 9U)/* CLK */
|(0U <<10U)/* SIMO */
|(0U << 11U);/* SOMI */
/**- MIBSPI1端口方向*/
spiREG1->PCDIR = 1U /* SCS[0]*/
|(1U << 1U)/* SCS[1]*/
|(1U <<2U)/* SCS[2]*/
|(1U << 3U)/* SCS[3]*/
|(0U <<4U)/* SCS[4]*/
|(1U <<5U)/* SCS[5]*/
|(1U <<6U)/* SCS[6]*/
|(0U << 7U)/* SCS[7]*/
|(1U <<9U)/* CLK */
|(1U <<10U)/* SIMO */
|(0U << 11U);/* SOMI */
/**- MIBSPI1端口开漏使能*/
spiREG1->PCPDR = 0U /* SCS[0]*/
|(0U << 1U)/* SCS[1]*/
|(0U <<2U)/* SCS[2]*/
|(0U << 3U)/* SCS[3]*/
|(0U <<4U)/* SCS[4]*/
|(0U << 5U)/* SCS[5]*/
|(0U << 6U)/* SCS[6]*/
|(0U << 7U)/* SCS[7]*/
|(0U << 9U)/* CLK */
|(0U <<10U)/* SIMO */
|(0U << 11U);/* SOMI */
/**- MIBSPI1端口上拉/下拉选择*/
spiREG1->PCPSL = 1U /* SCS[0]*/
|(1U << 1U)/* SCS[1]*/
|(1U <<2U)/* SCS[2]*/
|(1U << 3U)/* SCS[3]*/
|(1U << 4U)/* SCS[4]*/
|(1U <<5U)/* SCS[5]*/
|(1U <<6U)/* SCS[6]*/
|(1U <<7U)/* SCS[7]*/
|(1U <<9U)/* CLK */
|(1U <<10U)/* SIMO */
|(1U << 11U);/* SOMI */
/**- MIBSPI1端口上拉/下拉使能*/
spiREG1->PCDIS = 0U /* SCS[0]*/
|(0U << 1U)/* SCS[1]*/
|(0U <<2U)/* SCS[2]*/
|(0U << 3U)/* SCS[3]*/
|(0U <<4U)/* SCS[4]*/
|(0U << 5U)/* SCS[5]*/
|(0U << 6U)/* SCS[6]*/
|(0U << 7U)/* SCS[7]*/
|(0U << 9U)/* CLK */
|(0U <<10U)/* SIMO */
|(0U << 11U);/* SOMI */
/* MIBSPI1将所有引脚设置为功能*/
spiREG1->PCFUN = 1U /* SCS[0]*/
|(1U << 1U)/* SCS[1]*/
|(1U <<2U)/* SCS[2]*/
|(1U << 3U)/* SCS[3]*/
|(1U << 4U)/* SCS[4]*/
|(1U <<5U)/* SCS[5]*/
|(1U <<6U)/* SCS[6]*/
|(1U <<7U)/* SCS[7]*/
|(1U <<9U)/* CLK */
|(1U <<10U)/* SIMO */
|(1U << 11U);/* SOMI */
/**-最后启动 MIBSPI1 */
spiREG1->GCR1 =(spiREG1->GCR1 & 0xFEFFFFFFU)|(1U << 24U);
}
void spiSetData (spiBASE-t * SPI、uint32组、uint16 *数据)
{
spiRAM_t *ram = SPI => spiREG1? spiRAM1:spiRAM2;
uint32 start =(SPI->TGCTRL[组]>> 8U)& 0xFFU;
uint32 end = group ==7U? ((((SPI->LTGPEND & 0x0000EF00U)>>8U)+ 1U):((SPI->TGCTRL[group+1U]>> 8U)和0xFFU);
如果(结束<开始){结束= 128U;}
while (开始<结束)
{
RAM->TX[start].data =*数据++;
Start++;
}
/*用户代码开始(0)*/
/*用户代码结束*/
}
void spiEnableGroupNotification (spiBASE-t * SPI、uint32组、uint32级别)
{
if (级别!= 0U)
{
SPI->TGITLVST =(SPI->TGITLVST & 0x0000FFFFU)|((1U <<组)<< 16U);
}
其他
{
SPI->TGITLVCR =(SPI->TGITLVCR & 0x0000FFFFU)|((1U <<组)<< 16U);
}
SPI->TGITENST =(SPI->TGITENST & 0x0000FFFFU)|((1U <<组)<< 16U);
}
void spiTransfer (spiBASE-t * SPI、uint32组)
{
SPI->TGCTRL[组]|= 0x80000000U;
}
int main()
{
rtiInit();
spiInit();
gioInit();
hetInit();
gioSetDirection (gioPORTA、0xFFFFFFFF);
gioSetDirection (hetPORT、0xFFFFFFFF);
rtiEnableNotification (rtiNOTIFICATION_COMPARE0);
//_enable_IRQ ();
rtiStartCounter (rtiCOUNTER_BLOCK0);
EDGE =低电平;
//spiEnableGroupNotification (spiREG1,0、0);
spiEnableGroupNotification (spiREG1,0、0);
spiEnableGroupNotification (spiREG1,1,1,0);
spiEnableGroupNotification (spiREG1、2、0);
spiEnableGroupNotification (spiREG1,3,0);
spiEnableGroupNotification (spiREG1,4,0);
spiEnableGroupNotification (spiREG1,5,0);
spiEnableGroupNotification (spiREG1,6,0);
spiEnableGroupNotification (spiREG1,7,0);
SetspiData (spiREG1、0、TG0_TX_DATA);
SetspiData (spiREG1、1、TG0_TX_DATA);
SetspiData (spiREG1、2、TG0_TX_DATA);
SetspiData (spiREG1、3、TG0_TX_DATA);
SetspiData (spiREG1、4、TG0_TX_DATA);
SetspiData (spiREG1、5、TG0_TX_DATA);
SetspiData (spiREG1、6、TG0_TX_DATA);
SetspiData (spiREG1、7、TG0_TX_DATA);
while (1)
{
spiTransfer (spiREG1、0);
spiTransfer (spiREG1,1);
spiTransfer (spiREG1、2);
spiTransfer (spiREG1、3);
spiTransfer (spiREG1,4);
spiTransfer (spiREG1,5);
spiTransfer (spiREG1,6);
spiTransfer (spiREG1,7);
}