使用McBSP模拟SPI进行收发数据,通过DMA怎么进行发送呢

[复制链接]
277|0
Ld13705687562 发表于 2025-10-11 22:30 | 显示全部楼层 |阅读模式
DMA, , mcbsp, , , 使用
我使用McBSP模拟SPI进行以太网CH395Q收发数据,通过DMA怎么配置了源地址和目的地址,源地址为我要发送的数据,目的地址为McbspaRegs.DXR1.all,那么接下来怎么样进行配置才能发送呢,还需要拉低片选使能和发送写命令吗

    EALLOW;

    /* 发送DMA初始化  */
    DmaRegs.DMACTRL.bit.HARDRESET = 1; // 硬件复位
    __asm(" NOP");                     // Only 1 NOP needed per Design
    DmaRegs.CH1.MODE.bit.CHINTE = 1;   // 通道中断使能
    DmaRegs.CH1.BURST_SIZE.all = 0;    // 每次突发传输1+0个字
    DmaRegs.CH1.SRC_BURST_STEP = 0;    // 指定处理触发数据时递增/递减后的源地址步长
    DmaRegs.CH1.DST_BURST_STEP = 0;    // 指定处理触发数据时递增/递减后的目的地址步长
    DmaRegs.CH1.TRANSFER_SIZE = 0;     // 指定数据传输大小为1+0(每次突发传输的循环次数)
    // 在接收到一些数据后移动下一个字到buffer中
    DmaRegs.CH1.SRC_TRANSFER_STEP = 1; // 源传输步进寄存器(指针增/减步长)
    DmaRegs.CH1.DST_TRANSFER_STEP = 0; // 目的传输步进寄存器(指针增/减步长)
    DmaRegs.CH1.SRC_ADDR_SHADOW = (Uint32)&S_MCBSP_DMA.DMATxCash[0];     // 数据源地址影子寄存器
    DmaRegs.CH1.SRC_BEG_ADDR_SHADOW = (Uint32)&S_MCBSP_DMA.DMATxCash[0]; // 数据源开始地址影子寄存器
    DmaRegs.CH1.DST_ADDR_SHADOW = (Uint32)&McbspaRegs.DXR1.all;     // 目的地址起始影子寄存器 = MCBSP数据传输寄存器位15-0
    DmaRegs.CH1.DST_BEG_ADDR_SHADOW = (Uint32)&McbspaRegs.DXR1.all; // 目的地址起始影子寄存器 = MCBSP数据传输寄存器位15-0
    DmaRegs.CH1.CONTROL.bit.PERINTCLR = 1; // 外设中断清除
    DmaRegs.CH1.CONTROL.bit.SYNCCLR = 1;   // 清除同步标志位
    DmaRegs.CH1.CONTROL.bit.ERRCLR = 1;    // 清除同步错误标志位
    DmaRegs.CH1.DST_WRAP_SIZE = 0xFFFF; // 目标换行大小寄存器
    DmaRegs.CH1.SRC_WRAP_SIZE = 0xFFFF; // 源目标换行大小寄存器
    DmaRegs.CH1.MODE.bit.SYNCE = 0;     // 同步使能
    DmaRegs.CH1.MODE.bit.SYNCSEL = 0;   // 同步模式
    DmaRegs.CH1.MODE.bit.CHINTE = 1;    // 通道中断使能
    DmaRegs.CH1.MODE.bit.CHINTMODE = 1; // 通道中断生成模式
    DmaRegs.CH1.MODE.bit.PERINTE = 1;   // 外设中断触发使能
    DmaRegs.CH1.MODE.bit.PERINTSEL = DMA_MXEVTA; // 外设中断触发源
    DmaRegs.CH1.CONTROL.bit.PERINTCLR = 1;       // 外设中断清除
    DmaRegs.CH1.MODE.bit.CONTINUOUS = 1;         // 写1重新初始化DMA,等待下次触发信号


   DmaRegs.CH1.BURST_SIZE.all = 0;
    DmaRegs.CH1.TRANSFER_SIZE = DataLen - 1;
    DmaRegs.CH1.CONTROL.bit.RUN = 1;

您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

1

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部