+ uint32_t status = DMAC_EBCISR;
+ uint32_t irq_ch = (status & (((dmac_ch_enabled |
+ (dmac_ch_enabled << DMAC_EBCIDR_ERR0) >> DMAC_EBCIDR_ERR0) |
+ (dmac_ch_enabled << DMAC_EBCIDR_CBTC0) >> DMAC_EBCIDR_CBTC0) & 0xFF));
+ if (irq_ch)
+ for(int i = 0; i < 6; i++)
+ {
+ if (BV(i) & irq_ch)
+ if(dmac[i].handler)
+ dmac[i].handler(status);
+ }
+}
+
+bool dmac_enableCh(int ch, dmac_handler_t handler)
+{
+ ASSERT(ch <= DMAC_CHANNEL_CNT);
+
+ dmac_ch_enabled |= BV(ch);
+ if (handler)
+ {
+ dmac[ch].handler = handler;
+ DMAC_EBCIER |= (BV(ch) << DMAC_EBCIER_BTC0) | (BV(ch) << DMAC_EBCIDR_CBTC0) | (BV(ch) << DMAC_EBCIDR_ERR0);
+ kprintf("Init dmac ch[%08lx]\n", DMAC_EBCIMR);
+ }
+
+ return true;