模块化

/******************************************************
*   program: EDMA_pingpong_Int                       **
*   Description: how to Init EDMA pingpong transfer  **
*   Author: hanyj                                    **
********************************************************/

/**************************************************         
 ******               定义通道和通道参数结构      *****
***************************************************/

/**********  定义通道 three EDMA channel handle*/
EDMA_Handle hEdma;     /* Handle for the EDMA channel                 */
EDMA_Handle hEdmaPing; /* Handle for the ping EDMA reload parameters  */
EDMA_Handle hEdmaPong; /* Handle for the pong EDMA reload parameters  */

/* 定义并初始化三个通道参数结构 three EDMA channel Param structure   */
EDMA_Config cfgEdma{};   /* EDMA configuration structure */
EDMA_Config cfgEdmaPing{} ;
EDMA_Config cfgEdmaPong{} ;

/**************************************************         
 ******               通道初始化                     *****
***************************************************/

/***********通道初始化步骤1 打开事件对应的通道 ********************** */

/* 1.Lets open up the EDMA channel associated with timer #1. */     //打开某个事件对应的通道
  hEdma = EDMA_open(EDMA_CHA_TINT1, EDMA_OPEN_RESET);
// 2.定义两个 link 通道:将hEdmaPing 和 hEdmaPong 与任意两个link 通道表关联
  hEdmaPing = EDMA_allocTable(-1);
  hEdmaPong = EDMA_allocTable(-1);

/*************** 通道初始化步骤2  配置通道********************************/

/* 三个通道参数的rld段初始化,实质将通道进行了link初始化 */
/* Let's initialize the link fields of the configuration structures */
cfgEdmaPing.rld = EDMA_RLD_RMK(0,hEdmaPing);
cfgEdmaPong.rld = EDMA_RLD_RMK(0,hEdmaPong);
cfgEdma.rld     = EDMA_RLD_RMK(0,hEdmaPong);

/*********   配置通道   **********************/
/* Now let's program up the EDMA channel with the configuration structure */   //配置该通道
  EDMA_config(hEdma, &cfgEdma);  
  EDMA_config(hEdmaPing, &cfgEdmaPing);
  EDMA_config(hEdmaPong, &cfgEdmaPong);  
   
/****************   使能 **********************************/
/* Enable the EDMA channel */
  EDMA_enableChannel(hEdma); 
   
/**********************    以上三个EDMA通道都已顺利完成初始化***********************/

/***************************************************        
 ******        由于用到中断,接下来设置EDMA中断     *****
***************************************************/

/************** step1 interupt_int*********************/
setupInterruptsEDMA();

/*子函数代码*/
/************************************************************************/
void setupInterruptsEDMA(void)
{
     IRQ_setVecs(vectors);     /* point to the IRQ vector table    */
     IRQ_nmiEnable();
     IRQ_globalEnable();
     IRQ_map(IRQ_EVT_EDMAINT, 8);
     IRQ_reset(IRQ_EVT_EDMAINT);
} /* End of SetInterruptsEdma() */

/**********************step2 ENABLE  EDMA Interupt*********************************/

//CPU可以响应该中断
  IRQ_enable(IRQ_EVT_EDMAINT);
//EDMA可以产生中断                    
  EDMA_intDisable(TCCINTNUM);    // CIER disable
  EDMA_intClear(TCCINTNUM);      // CIPR
  EDMA_intEnable(TCCINTNUM);     // CIER enable
 
/***************************************************        
 ******        开始传输,等待事件触发EDMA传输     *****
***************************************************/

/******  此处为定时器事件***********************/

TIMER_start(hTimer);
  while(transferCount <= TRANSFER_CNT); /* waiting for interrupts */

/***************************************************        
 ******        每次EDMA传输结束,进EDMA中断 *****
***************************************************/
interrupt void   
c_int08(void)   
{
  /* 步骤1:清除挂起中断,以免嵌套中断*/
 /*Clear the pending interrupt from the EDMA interrupt pending register */
  EDMA_intClear(TCCINTNUM);

/*Exit from the program if certain no of transfres are done*/
  if (transferCount >= TRANSFER_CNT)
  {
      TIMER_pause(hTimer);
      stopEdma();
      TIMER_close(hTimer);
      printf ("/nDone.....");
      exit(0);   
  }
  /* 步骤2:pingponglink*/
  
  /* Based on if we ping'ed or pong'ed, we need to set the EDMA channel */
  /* link address for the NEXT frame.                                   */
    if (pingpong){  
    /* Now filled pong so set link to ping */
    EDMA_link(hEdma,hEdmaPing);
       
  }else{
    /* Now filled ping so set link to pong */   
    EDMA_link(hEdma,hEdmaPong);   
  } 
  /* 步骤3:处理*/  
  processbuff(0);
   
  pingpong = (pingpong + 1) & 1;

return;

} /* end c_int08 */

/***************************************************        
 ******        适当条件下,结束EDMA传输            *****
***************************************************/

void stopEdma(void) {

/*Disable interrupts, close EDMA channel before exit of the program*/

IRQ_disable(IRQ_EVT_EDMAINT);   //after IRQ_enable;
    EDMA_intDisable(TCCINTNUM);    // CIER
    EDMA_intClear(TCCINTNUM);     //CIPR
   
    EDMA_RSET(CCER,0x00000000);    //CCER_RST
       
    EDMA_disableChannel(hEdma);    //after EDMA_enable  EER

EDMA_close(hEdma);              // afer EDMA_open ER

EDMA_resetAll();
         EDMA_RSET(CIPR,0xFFFFFFFF);
         EDMA_RSET(ECR,0xFFFFFFFF);

}

EDMA SEED 例程相关推荐

  1. C6000 EDMA 使用心得总结

    转载自左超的CSDN博客http://blog.csdn.net/henhen2002/article/details/4464166 几天调下来,总感觉TI的文档语焉不详.不过想想也对,250页的文 ...

  2. 一天上手Aurora 8B/10B IP核(4)----从Streaming接口的官方例程学起

    Xilinx的技术生态做的非常好,基本上所有常用的IP核都有官方例程(example design)供开发者学习,咱不用白不用,今儿咱就一起白嫖他一手----从官方例程开始学习如何具体使用这个IP核. ...

  3. 【OpenCV 例程 300篇】221.加密马赛克图像处理与解密复原

    『youcans 的 OpenCV 例程200篇 - 总目录』 [youcans 的 OpenCV 例程 300篇]221.加密马赛克图像处理与解密复原 9. 图像的马赛克处理 马赛克效果是广泛使用的 ...

  4. 一天上手Aurora 8B/10B IP核(5)----从Framing接口的官方例程学起

    文章目录 写在前面 1.IP核定制与官方例程的生成 1.1.第一页配置:物理层以及链路层信息选择 1.2.第二页配置:对应GT收发器的物理位置选择 1.3.第三页配置:共享逻辑的位置 1.4.官方例程 ...

  5. OMAPL138 + SPARTAN6 DSP+ARM+FPGA开发例程

    目 录 本例程基于信迈OMAPL138+SPARTAN6评估板开发. 开发板准备 16 查看仿真器驱动是否正常安装 17 程序加载和烧写 19 基于仿真器的程序加载和烧写 19 设置工程配置文件信息 ...

  6. 【学习分享】0、创龙 TMS320C6748开发例程使用手册

    如果需要从头开始进行本使用手册的阅读,欢迎阅读本博其他文章(见置顶或文章结尾) 由广州创龙自主研发的SOM-TL6748核心板是基于TI TMS320C6748定点/浮点DSP核心板,55mm*33m ...

  7. - TMS320C6748———EDMA简介及配置

    一.EDMA模块介绍 TMS320C6748是一款高性能DSP,非常适合用来跑大数据量的算法,而这样的算法往往需要保证实时性,那么这么大规模的数据怎么进行运算能够让程序跑的最快,我们知道DSP中运算最 ...

  8. OpenCV例程赏析

    OpenCV例程赏析 ①SITF特征检测匹配(目标查找)例程:-\opencv\sources\samples\python2\find_obj.py(asift.py) #!/usr/bin/env ...

  9. 清新脱俗的TensorFlow CIFAR10例程的代码重构——更简明更快的数据读取、loss accuracy实时输出

    如果你苦于Tensorflow官方例程的冗长和数据读取的繁杂,那么这篇博客就是你需要看的啦~ Motivation 这段时间学习TensorFlow走了很多弯路,刚开始的MNIST例程还是比较容易啃的 ...

最新文章

  1. Python求解最速降线问题
  2. python安装numpy-python安装numpy和pandas的方法步骤
  3. 某CrackMe算法分析
  4. java消息幂等性实现_探讨一下实现幂等性的几种方式
  5. 【C++】构建哈希表
  6. 怎么实现阴影效果呢?
  7. Servlet和JSP中的文件上传示例
  8. 年度回顾 | 2019 年的 Apache Flink
  9. 如何清理电脑c盘_【电脑】第一期干货:如何正确清理C盘?
  10. Oracle :备份 、还原数据库
  11. C++冒泡排序(包含初级、正宗及改进三种实现)
  12. 【Java8 新特性 3】java8 supplier
  13. 实验六 卷积神经网络(4)ResNet18实现MNIST
  14. Windows下文本文件编码转换
  15. Only the Paranoid Survive
  16. 3蛋白wb_干货分享:三个蛋白组学数据库的应用
  17. 携程平台增长部总经理王绩强:原生互联网企业正在经历一场数字升级丨数据猿专访...
  18. layui复选框默认选中
  19. 外贸业务员如何开发出更多的有效客户?
  20. 计算机公式乘法字处理,字符串乘法

热门文章

  1. 数学里的 e 为什么叫做自然底数?
  2. 【微信退款】同一订单第二次无法退款
  3. 15V转5V稳压芯片选型表
  4. 杭州python培训兄弟连
  5. GPS/BDS:星历表、历书、GPS三种启动方式
  6. H3C_交换机_Vlan配置
  7. 破解教程 第十一课 crackme破解教程(用trw2000追注册码)=====破解经典句式篇
  8. 情人节程序员用HTML网页表白【烟花代码】 HTML5七夕情人节表白网页源码 HTML+CSS+JavaScript
  9. 李开复自传披露离职原因
  10. unit自动驾驶怎么使用_微软模拟飞行10如何自动驾驶?