所谓的触发源就是触发DMA去转移数据的标志。六个DMA通道中的每个通道都可以独立配置相应的触发源。DMA的外设中断事件触发源共有18个,其中包括8个外部中断信号。这8个外部中断信号可以由28335片子上的大多数的GPIO输入。从而大大提高了DMA触发源配置的灵活性。
每个DMA通道可以由MODE寄存器的PERINTSEL来进行配置相应的中断触发源。如果一个有效的外部中断触发源被锁存进CONTROL寄存器的PERINTFLG位,而且相应的中断以及DMA通道已经使能(通过MODE.CHx[PERINTE]位和CONTROL.CHx[RUNSTS]位使能),那么当中断产生时,它就会被响应的DMA通道所响应。在响应中断事件之后,DMA会自动的清空中断标志位,从而能够接收更多的后续中断信号。
我们可以通过程序控制CONTROL.CHx[PERINTFRC]位来随时触发DMA。同样也可以随时用程序控制CONTROL.CHx[PERINTCLR]位来清空挂起的DMA触发事件。
一旦一个DMA通道的PERINTFLG位被外部中断触发事件置位,那么该位的状态会一直保持,直到该通道在优先级逻辑模块的控制下响应中断并开始读取数据。只要开始读取数据,那么该位就会被自动清零。当一个数据转移操作正在进行时,一个新的中断触发事件产生,那么这个事件会被挂起,知道数据转移完毕。如果在被挂起的中断触发事件被响应之前,另一个也就是第三个触发事件产生,那么就会将错误标志位CONTROL.CHx[OVRFLG]置位。当一个外设中断触发事件发生时,锁存标志(PERINTFLG)正在清零,那么外设中断触发时间具有优先权,PERINTFLG会继续保持置位状态。
下图是DMA外设中断触发源输入框图: