16 #if defined(__MSP430_HAS_DMAX_3__) || defined(__MSP430_HAS_DMAX_6__)
21 void DMA_init( DMA_initParam *
param){
22 uint8_t triggerOffset = (
param->channelSelect >> 4);
26 param->transferModeSelect
27 +
param->transferUnitSelect
28 +
param->triggerTypeSelect;
33 if (triggerOffset & 0x01){
34 HWREG16(DMA_BASE + (triggerOffset & 0x0E)) &= 0x00FF;
36 (triggerOffset & 0x0E)) |= (
param->triggerSourceSelect << 8);
38 HWREG16(DMA_BASE + (triggerOffset & 0x0E)) &= 0xFF00;
39 HWREG16(DMA_BASE + (triggerOffset & 0x0E)) |=
param->triggerSourceSelect;
42 void DMA_setTransferSize (uint8_t channelSelect,
43 uint16_t transferSize)
46 HWREG16(DMA_BASE + channelSelect + OFS_DMA0SZ) = transferSize;
49 uint16_t DMA_getTransferSize (uint8_t channelSelect)
52 return HWREG16(DMA_BASE + channelSelect + OFS_DMA0SZ);
55 void DMA_setSrcAddress (uint8_t channelSelect,
57 uint16_t directionSelect)
60 __data16_write_addr((
unsigned short)(DMA_BASE + channelSelect + OFS_DMA0SA),
64 HWREG16(DMA_BASE + channelSelect + OFS_DMA0CTL) &= ~(DMASRCINCR_3);
65 HWREG16(DMA_BASE + channelSelect + OFS_DMA0CTL) |= directionSelect;
68 void DMA_setDstAddress (uint8_t channelSelect,
70 uint16_t directionSelect)
73 __data16_write_addr((
unsigned short)(DMA_BASE + channelSelect + OFS_DMA0DA),
77 HWREG16(DMA_BASE + channelSelect + OFS_DMA0CTL) &= ~(DMADSTINCR_3);
78 HWREG16(DMA_BASE + channelSelect + OFS_DMA0CTL) |= (directionSelect << 2);
81 void DMA_enableTransfers (uint8_t channelSelect)
83 HWREG16(DMA_BASE + channelSelect + OFS_DMA0CTL) |= DMAEN;
86 void DMA_disableTransfers (uint8_t channelSelect)
88 HWREG16(DMA_BASE + channelSelect + OFS_DMA0CTL) &= ~(DMAEN);
91 void DMA_startTransfer (uint8_t channelSelect)
93 HWREG16(DMA_BASE + channelSelect + OFS_DMA0CTL) |= DMAREQ;
96 void DMA_enableInterrupt (uint8_t channelSelect)
98 HWREG16(DMA_BASE + channelSelect + OFS_DMA0CTL) |= DMAIE;
101 void DMA_disableInterrupt (uint8_t channelSelect)
103 HWREG16(DMA_BASE + channelSelect + OFS_DMA0CTL) &= ~(DMAIE);
106 uint16_t DMA_getInterruptStatus (uint8_t channelSelect)
108 return (
HWREG16(DMA_BASE + channelSelect + OFS_DMA0CTL) & DMAIFG);
111 void DMA_clearInterrupt (uint8_t channelSelect)
113 HWREG16(DMA_BASE + channelSelect + OFS_DMA0CTL) &= ~(DMAIFG);
116 uint16_t DMA_getNMIAbortStatus (uint8_t channelSelect)
118 return (
HWREG16(DMA_BASE + channelSelect + OFS_DMA0CTL) & DMAABORT);
121 void DMA_clearNMIAbort (uint8_t channelSelect)
123 HWREG16(DMA_BASE + channelSelect + OFS_DMA0CTL) &= ~(DMAABORT);
126 void DMA_disableTransferDuringReadModifyWrite (
void)
128 HWREG16(DMA_BASE + OFS_DMACTL4) |= DMARMWDIS;
131 void DMA_enableTransferDuringReadModifyWrite (
void)
133 HWREG16(DMA_BASE + OFS_DMACTL4) &= ~(DMARMWDIS);
136 void DMA_enableRoundRobinPriority (
void)
138 HWREG16(DMA_BASE + OFS_DMACTL4) |= ROUNDROBIN;
141 void DMA_disableRoundRobinPriority (
void)
143 HWREG16(DMA_BASE + OFS_DMACTL4) &= ~(ROUNDROBIN);
146 void DMA_enableNMIAbort (
void)
148 HWREG16(DMA_BASE + OFS_DMACTL4) |= ENNMI;
151 void DMA_disableNMIAbort (
void)
153 HWREG16(DMA_BASE + OFS_DMACTL4) &= ~(ENNMI);
MPU_initThreeSegmentsParam param