Blackfin BF537 的 DMA模式 UART通信程序简例

本文介绍了使用Blackfin系列DSP通过DMA模式配置串口(UART0)接收数据的方法。主要涉及DMA控制器的初始化、配置寄存器设置及中断处理过程。通过具体的C代码示例,展示了如何设置DMA通道进行数据传输。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 http://blog.sina.com.cn/s/blog_61e8ebaa0100eq28.html

2009年09月01日, Blackfin系列DSP学习,第一例: 以DMA模式接收一组数据,显示接收成功。

磊正shuleizh@126.com

#include "GPSData.h"
#include "uart.h"
#define SSYNC    asm("ssync;")

#define X_COUNT  3

 

volatile char sUART0_RxBuffer[X_COUNT];
/

void config_dma9(void) //Uart0 TX
{

 *pDMA9_CONFIG=0;

 *pDMA9_CONFIG |=FLOW_AUTO+NDSIZE_0+DI_EN+0x0020+WDSIZE_8+WNR;
             // AutoBuffer +Interrupt when completion +SYNC +8 bit transfer+memory write
 SSYNC;

*pDMA9_START_ADDR=0xFFC00E44; 
 SSYNC;
 
 *pDMA9_X_COUNT=X_COUNT; 
 SSYNC;
 
 *pDMA9_X_MODIFY=1;
 SSYNC;
 
 *pDMA9_CONFIG |=DMAEN; 
}


void config_dma8(void) //Uart0 RX
{

 *pDMA8_CONFIG=0;
 *pDMA8_CONFIG |=FLOW_AUTO+NDSIZE_0+0x0020+WDSIZE_8+WNR+DI_EN;
             // AutoBuffer +1D,Interrupt when completion +SYNC +8 bit transfer+memory write
 SSYNC;
 
 *pDMA8_START_ADDR=(void *)sUART0_RxBuffer;
 SSYNC;
 
 *pDMA8_X_COUNT=X_COUNT;
 SSYNC;
 
 *pDMA8_X_MODIFY=1;
 SSYNC;
 
 *pDMA8_CONFIG |=DMAEN; 
}

//****************************************************************************

void Config_Uart0_Interrupt(void)
{

    config_dma8();     //Uart0 RX-> DMA mode
    init_uart0_dma();
 
    //assign core IDs to interrupt
   *pSIC_IAR0 = 0xffffffff;
   *pSIC_IAR1 = 0xfff33fff; //DMA8/9 (UART0 TX/RX)-->IVG10
   *pSIC_IAR2 = 0xffffffff; 
   *pSIC_IAR3 = 0xffffffff; 
   
 //assign ISRs to interrupt vectors
 register_handler(ik_ivg10,UART0_ISR); // IVG10-> UART0_ISR
 
 //enable interrupt
    //*pSIC_IMASK=IRQ_DMA8+IRQ_DMA9; // enable UART0_TX and UART0_RX
    *pSIC_IMASK=IRQ_DMA8; // enable UART0_RX interrupt, used when command a function

}


//****************************************************************************
//UARTx Interrupt Service Function

EX_INTERRUPT_HANDLER(UART0_ISR)
{

 
        // rcv_buf[0]=*pUART0_RBR;
         *pDMA8_IRQ_STATUS |=1;
         uart0SendString("DMA Recieved a message!"); 
        // uart0SendChar(rcv_buf[0]);
         uart0SendString("\n");
        
   
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值