您的位置 首页 5G

SAM4E单片机之旅——21、DMAC之USART回显

DMAC也可以和外设进行数据交互。之前我们曾使用PDC进行USART的数据回显,这次就使用DMAC完成相同的工作。而且由于DMAC有内部的缓冲区,实现起来更为简单。一、USART设置因为之

  DMAC也能够和外设进行数据交互。之前咱们曾运用PDC进行USART的数据回显,这次就运用DMAC完结相同的作业。并且因为DMAC有内部的缓冲区,完成起来更为简略。

  一、 USART设置

  因为之前现已做过相关的试验,这儿不再重复。需求留意的是,要留意JP11的跳线,以挑选正确的协议(RS232)。别的,假如运用硬件握手协议的话,留意设置PC端串口通讯软件的线路操控信号。

  别的,因为不再运用手动的缓冲区和PDC,所以不需求进行相关的设置。一起,也不必再运用USART的接纳超时功用。

  二、 DMAC设置

  本次运用的通道仍然为通道0:

  1#define DMAC_CH 0

  启用DMAC:

  1// 代码略…

  设置DSCR为0,以进行单次传输:

  1DMAC->DMAC_CH_NUM[DMAC_CH].DMAC_DSCR = 0;

  设置SADDR以及DADDR。

  因为数据都在US_RHR和US_THR的低位上,所以将源地址和方针地址别离设为这两个寄存器的地址即可。

  DMAC->DMAC_CH_NUM[DMAC_CH].DMAC_SADDR =

  &(USART1->US_RHR);

  DMAC->DMAC_CH_NUM[DMAC_CH].DMAC_DADDR =

  &(USART1->US_THR);

  设置CTRLA和CTRLB。

  在USART数据位为8位时,一次传输一个字节即可。

  DMAC->DMAC_CH_NUM[DMAC_CH].DMAC_CTRLA =

  DMAC_CTRLA_BTSIZE(16) // 进行16次传输

  | DMAC_CTRLA_SRC_WIDTH_BYTE // 一次传输一个字节

  | DMAC_CTRLA_DST_WIDTH_BYTE // 同上

  ;

  DMAC->DMAC_CH_NUM[DMAC_CH].DMAC_CTRLB =

  DMAC_CTRLB_FC_PER2PER_DMA_FC //外设至外设的传输

  | DMAC_CTRLB_SRC_INCR_FIXED // 传输时源地址固定

  | DMAC_CTRLB_DST_INCR_FIXED // 传输时方针地址固定

  ;

  设置CFG寄存器。

  因为DMAC和USART1之间有硬件握手接口,所以这儿运用硬件握手接口即可(不然需求运用软件握手接口手动触发传输)。USART1的发送接标语为5,接纳接标语为6:

clip_image002

  因为需求赶快将DMAC内部缓冲区的内容传输出去,所以一旦其数据量能够发送,就发送出去。

  DMAC->DMAC_CH_NUM[DMAC_CH].DMAC_CFG =

  DMAC_CFG_SRC_H2SEL_HW // 运用硬件握手

  | DMAC_CFG_DST_H2SEL_HW

  | DMAC_CFG_SRC_PER(6) // 接标语

  | DMAC_CFG_DST_PER(5)

  | DMAC_CFG_SOD_DISABLE

  | DMAC_CFG_FIFOCFG_ASAP_CFG // 赶快发送数据

  ;

  启用中止。

  在传输使命完结后,需求从头启用通道,以从头开始使命。

  1

  2DMAC->DMAC_CHER = DMAC_CHER_ENA0 << DMAC_CH;

  // NV%&&&&&%中止设置的代码略…

  中止处理。

  在中止中从头设置CTRLA寄存器的BTSIZE字段,再启用通道即可。

  void DMAC_Handler(void)

  {

  uint32_t status = DMAC->DMAC_EBCISR;

  // 判别是否为指定中止

  if (status & (DMAC_EBCISR_CBTC0 << DMAC_CH))

  {

  // 设置 CTRLA

  DMAC->DMAC_CH_NUM[DMAC_CH].DMAC_CTRLA &=

  ~(uint32_t)DMAC_CTRLA_BTSIZE_Msk;

  DMAC->DMAC_CH_NUM[DMAC_CH].DMAC_CTRLA |=

  DMAC_CTRLA_BTSIZE(16);

  // 再次启用通道

  DMAC->DMAC_CHER = DMAC_CHER_ENA0 << DMAC_CH;

  }

  }

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/yingyong/5g/203713.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部