这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » 求助瑞萨工程师关于用DMA实现串口连续收发的问题

共3条 1/1 1 跳转至

求助瑞萨工程师关于用DMA实现串口连续收发的问题

菜鸟
2008-11-07 14:44:25     打赏
要求每次传送8个字节的数据,使用时钟异步串行模式。不知道如何才能让DMA工作?以发送为例:我设定的DMA触发源为UART0发送中断(TI=0),程序段如下,希望各位帮忙找到问题,谢谢!

#include "sfr28.h"

void mcu_init(void);

void io_init(void);

void dma_init(void);

unsigned short rcv_data[8];

void main(void)

{

  mcu_init();

  io_init();

  dma_init();

  asm("fset i");

  dm0con |=0x08;

  u0c1 |=0x05;

  while(1);

}

void mcu_init(void)

{

   prcr=0x03;
   pm0=0x00;//Single-chip mode

   pm1=0x08;//No wait,No expansion

   cm0=0x08;//XCIN-XCOUT High

   cm1=0x20;
   pm2=0x00;

   pclkr=0x03;//TAiTBiSI/O clock select bit

   prcr=0x00;//Protects all registers

}

void io_init(void)

{

   u0mr=0x05;//UART mode

   u0c0=0x10;//BRG f1 or f2

   u0brg=129;//n=129

   u0c1=0x00;

   ucon=0x01;//set U0C1

   u2smr=0x00;

   u2smr2=0x00;

   u2smr3=0x00;

   u2smr4=0x00;

   s0ric=0;

}

 

void dma_init(void)

{

  dm0sl=0x0a;

  dm0con=0x10;

 

  sar0_addr.byte.low=(char)( &rcv_data);

  sar0_addr.byte.mid=(char)((unsigned long)(& rcv_data)>>8);

  sar0_addr.byte.high=(char)((unsigned long)(& rcv_data)>>16);

 

  dar0_addr.byte.low=(char)(&u0tb);

  dar0_addr.byte.mid=(char)((unsigned long)(& u0tb)>>8);

  dar0_addr.byte.high=(char)((unsigned long)(& u0tb)>>16);//set DMA0 transfer counter

  tcr0=7;

  dm0ic=4;//set DMA0 interrupt priority-level=4

}
我尝试在while(1)前加上u0tb=0x5a,但是DMA仍然没有运行,只能收到0x5a本身。




关键词: 求助     瑞萨     工程师     关于     实现     串口     连续     收发         

菜鸟
2008-11-13 11:24:09     打赏
2楼
“我尝试在while(1)前加上u0tb=0x5a,但是DMA仍然没有运行,只能收到0x5a本身。”
您所说“DMA仍然没有运行”是指没有进入DMA中断吗?“只能收到0x5a本身”是指接收端只能收到1个字节数据是吗?

助工
2008-11-19 17:53:18     打赏
3楼
请参考:
http://documentation.renesas.com/eng/products/region/rtcn/mpumcu/apn/rcc05b0070_m16cap.pdf
这个是M16C/62P的,28与62P基本相同。

共3条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]