完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
电子发烧友论坛|
您好,我正在研究一个应用程序,它读取SPI数据而不使用DMA到本地缓冲区中。在选择处理这个缓冲器之后,我想用DMA将它转发到另一个SPI信道上。到第二个PIC32 MZ。我所有这些工作都没有DMA,但我遇到麻烦了,将DMA添加到PIC32到PIC32 SPI信道。DMA通道2中断将触发2次,然后停止。所有中断使能寄存器仍然是设置。DMA通道3中断不会着火。在我的设置中有什么错误导致了这一点吗?我希望得到连续的DMA ISR调用。
以上来自于百度翻译 以下为原文 Hello, I am working on an app that reads SPI data without DMA into a local buffer. After optional processing this buffer I want to relay this out on another SPI channel using DMA. to a second PIC32MZ. I have all of this working without DMA, but I am running into trouble by adding DMA to the PIC32 to PIC32 spi channel. DMA channel 2 interrupt will fire 2 times then stop. All interrupt enable registers are still set. DMA channel 3 interrupt will not fire. Is there something wrong in my setup that is causing this? I expect to get continuous DMA ISR calls. void Init_Bus_Dma_Tx(void) { // DMA channel 2. physSourceDma = (unsigned int) &busBufferTx & 0x1FFFFFFF; physDestDma = (unsigned int) &SPI3BUF & 0x1FFFFFFF; IEC4bits.DMA2IE = 0; // Disable the DMA interrupt. IFS4bits.DMA2IF = 0; // Clear the DMA interrupt flag. DMACONbits.ON = 1; // Enable the DMA module. DCH2CONbits.CHPRI = 3; // Channel priority. DCH2CONbits.CHAEN = 1; // Channel Automatic Enable bit. DCH2SSAbits.CHSSA = physSourceDma; // Source start address. DCH2DSAbits.CHDSA = physDestDma; // Destination start address. DCH2SSIZbits.CHSSIZ = 32; // Source bytes. DCH2DSIZbits.CHDSIZ = 32; // Destination bytes. DCH2CSIZbits.CHCSIZ = 2; // Bytes to transfer per event. DCH2ECONbits.CHSIRQ = 0x8F; // SPI2 RX complete interrupt DCH2ECONbits.SIRQEN = 1; //Start channel cell transfer if an interrupt matching CHSIRQ occurs DCH2INTbits.CHBCIE = 1; // Channel block transfer complete interrupt. DCH2INTbits.CHERIE = 1; // Channel Address Error Interrupt. IPC34bits.DMA2IP = 7; // DMA interrupt priority. IPC34bits.DMA2IS = 3; // DMA subpriority. IEC4bits.DMA2IE = 1; // DMA interrupt enable. DCH2CONbits.CHEN = 1; // Channel enable. } void Init_Bus_Dma_Rx(void) { // DMA channel 3. physSourceDma = (unsigned int) &SPI3BUF & 0x1FFFFFFF; // From: physDestDma = (unsigned int) &busBufferRx & 0x1FFFFFFF; // To: IEC4bits.DMA3IE = 0; // Disable the DMA interrupt. IFS4bits.DMA3IF = 0; // Clear the DMA interrupt flag. DMACONbits.ON = 1; // Enable the DMA module. DCH3CONbits.CHPRI = 3; // Channel priority. DCH3CONbits.CHAEN = 1; // Channel Automatic Enable bit. DCH3SSAbits.CHSSA = physSourceDma; // Source start address. DCH3DSAbits.CHDSA = physDestDma; // Destination start address. DCH3SSIZbits.CHSSIZ = 32; // Source bytes. DCH3DSIZbits.CHDSIZ = 32; // Destination bytes. DCH3CSIZbits.CHCSIZ = 2; // Bytes to transfer per event. DCH2ECONbits.CHSIRQ = 0x9C; // SPI3 TX complete interrupt DCH2ECONbits.SIRQEN = 1; //Start channel cell transfer if an interrupt matching CHSIRQ occurs DCH3INTbits.CHBCIE = 1; // Channel block transfer complete interrupt. DCH3INTbits.CHERIE = 1; // Channel Address Error Interrupt. IPC34bits.DMA3IP = 7; // DMA interrupt priority. IPC34bits.DMA3IS = 3; // DMA subpriority. IEC4bits.DMA3IE = 1; // DMA interrupt enable. DCH3CONbits.CHEN = 1; // Channel enable. } void __ISR(_DMA2_VECTOR, ipl7AUTO) __DMA2_IntHandler(void) { CS3_DESELECT(); DCH2INT &= ~0xff; //Clear the int flags. IFS4bits.DMA2IF = 0; // Clear the DMA interrupt flag. } void __ISR(_DMA3_VECTOR, ipl7AUTO) __DMA3_IntHandler(void) { DCH3INTbits.CHBCIF = 0; // Clear the Channel block transfer complete interrupt IFS4bits.DMA3IF = 0; // Clear the DMA interrupt flag. } |
|
相关推荐
1个回答
|
|
|
我忘了只提到中断源ATDCH2COMPATIONS。CHSIRQ将触发中断事件。DCH2It中的中断启用位不会产生一个中断事件,尽管标志已被设置。
以上来自于百度翻译 以下为原文 I forgot to mention only the interrupt source at DCH2ECONbits.CHSIRQ will trigger an interrupt event. None of the interrupt enable bits in DCH2INT will generate an interrupt event despite the flags getting set. |
|
|
|
|
只有小组成员才能发言,加入小组>>
MPLAB X IDE V6.25版本怎么对bootloader和应用程序进行烧录
473 浏览 0 评论
5793 浏览 9 评论
2334 浏览 8 评论
2224 浏览 10 评论
请问是否能把一个ADC值转换成两个字节用来设置PWM占空比?
3530 浏览 3 评论
1121浏览 1评论
有偿咨询,关于MPLAB X IPE烧录PIC32MX所遇到的问题
1095浏览 1评论
我是Microchip 的代理商,有PIC16F1829T-I/SS 技术问题可以咨询我,微信:A-chip-Ti
872浏览 1评论
MPLAB X IDE V6.25版本怎么对bootloader和应用程序进行烧录
473浏览 0评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-1 20:24 , Processed in 0.624322 second(s), Total 71, Slave 55 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
1234