我想向linux系统注册一个EDMA传输完成的中断服务程序,使用的注册函数是:request_irq(unsigned int irq, irq_handler_t handler, unsigned long flags, const char *name, void *dev),但对于该函数的第一个参数(中断号),我不知道怎么确定。对于GPIO中断,可以使用gpio_to_irq()函数获取对应的中断号,但对于EDMA,我就不知道要调用什么函数去获取对应的中断号。
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
我想向linux系统注册一个EDMA传输完成的中断服务程序,使用的注册函数是:request_irq(unsigned int irq, irq_handler_t handler, unsigned long flags, const char *name, void *dev),但对于该函数的第一个参数(中断号),我不知道怎么确定。对于GPIO中断,可以使用gpio_to_irq()函数获取对应的中断号,但对于EDMA,我就不知道要调用什么函数去获取对应的中断号。
请参考http://processors.wiki.ti.com/index.php/AM335x_EDMA_Driver%27s_Guide
并对照TRM关于EDMA操作的描述
你好。我现在是直接去设置寄存器,使用channal-18进行传输,对应的PaRam为:
OPT = 0x80112008
SRC = 0x8ea80000
CNT = 0x10001
DST = 0x8e500000
SRC_DST_BIDX = 0x0
BCNTRLD = 0x1ffff
SRC_DST_CIDX = 0x0
CCNT = 0x1
然后使能channel-18,设置Event Set Register:ESR的值为0x00040000,从而去触发EDMA进行输出。传输结果是正确的,但是对应的IPR寄存器却一直没有被置位。 按理说,我在OPT寄存器的TCINTEN位设置为1后,传输完成就会把相应的IPR置位才对啊。
1. 你是怎么直接读写寄存器的?
2. 最好使用已有的edma框架,避免一些设置上的冲突
直接操作寄存器确实不行,后来参照了edma example去编写自己的程序,已经成功了。