Other Parts Discussed in Thread: MSP430FR6007
器件型号: MSP430FR6007
您好!
我谈到这个主题、很遗憾、 论坛已经结束:MSP430FR6007:crc_table function - MSP 低功耗微控制器论坛 — MSP 低功耗微控制器 — TI E2E 支持论坛
我现在把它煮到 20 位地址室,当 Im 64kb 地址室与 CRC 模块相关时,我的 DMA 输入器工作,
不幸的是、当我进入扩展地址室 0x10000 时、它会杀死系统:
基本问题:MSP430FR6007 DMA 模块是否支持扩展地址空间?
DMA_initParam cfg = {
DMA_CHANNEL_0, // channelSelect
DMA_TRANSFER_BLOCK, // transferModeSelect
static_cast<uint16_t>(length), // transferSize
DMA_TRIGGERSOURCE_0, // triggerSourceSelect
DMA_SIZE_SRCBYTE_DSTBYTE, // transferUnitSelect
DMA_TRIGGER_RISINGEDGE // triggerTypeSelect
};
DMA_init(&cfg);
// Use proper 20-bit address handling
// Convert pointers to 32-bit first to avoid truncation
uint32_t volatile src_addr = reinterpret_cast<uint32_t>(src);
uint32_t volatile dst_addr = reinterpret_cast<uint32_t>(dst);
// Set the Source Address (20-bit)
__data20_write_long((uint32_t)&DMA0SA, src_addr & 0xFFFFF);
// Reset bits before setting them
HWREG16(DMA_BASE + DMA_CHANNEL_0 + OFS_DMA0CTL) &= ~(DMASRCINCR_3);
HWREG16(DMA_BASE + DMA_CHANNEL_0 + OFS_DMA0CTL) |= DMA_DIRECTION_INCREMENT;
// Set the Destination Address (20-bit)
__data20_write_long((uint32_t)&DMA0DA, dst_addr & 0xFFFFF);
HWREG16(DMA_BASE + DMA_CHANNEL_0 + OFS_DMA0CTL) &= ~(DMADSTINCR_3);
HWREG16(DMA_BASE + DMA_CHANNEL_0 + OFS_DMA0CTL) |= (DMA_DIRECTION_UNCHANGED << 2);
// Clear DMA interrupt flag and start transfer
DMA0CTL &= ~DMAIFG;
DMA_enableTransfers(DMA_CHANNEL_0);
DMA_startTransfer(DMA_CHANNEL_0);
// Poll for completion
while (!(DMA0CTL & DMAIFG))
{
__no_operation();
}
DMA_disableTransfers(DMA_CHANNEL_0);