EFM32例程——DMA
硬件:EFM32GG230512
工具:keil5
DMA实验
DMA测试,内存间传输
初始化
/*********************************************Copyright (c)***********************************************
** File name: adc.c
** Created by: Gui
** Version: V1.0.0
** Descriptions: DMA测试,内存间传输
*********************************************************************************************************/
#include "dma.h"/* * DMA控制块,必须根据通道数进行地址对齐*/
#if (DMA_CHAN_COUNT > 16)
#define DMA_CONTROL_BLOCK_ALIGNMENT 1024
#elif (DMA_CHAN_COUNT > 8)
#define DMA_CONTROL_BLOCK_ALIGNMENT 512
#elif (DMA_CHAN_COUNT > 4)
#define DMA_CONTROL_BLOCK_ALIGNMENT 256
#elif (DMA_CHAN_COUNT > 2)
#define DMA_CONTROL_BLOCK_ALIGNMENT 128
#endif/* * 根据不同的编译器对齐起始地址*/
#if defined (__ICCARM__)
#pragma data_alignment=DMA_CONTROL_BLOCK_ALIGNMENTDMA_DESCRIPTOR_TypeDef dmaControlBlock[DMA_CHAN_COUNT * 2];
#elif defined (__CC_ARM)DMA_DESCRIPTOR_TypeDef dmaControlBlock[DMA_CHAN_COUNT * 2] \__attribute__ ((aligned(DMA_CONTROL_BLOCK_ALIGNMENT)));
#elif defined (__GNUC__)DMA_DESCRIPTOR_TypeDef dmaControlBlock[DMA_CHAN_COUNT * 2] \__attribute__ ((aligned(DMA_CONTROL_BLOCK_ALIGNMENT)));
#else
#error Undefined toolkit, need to define alignment
#endifDMA_CB_TypeDef test_cb;//DMA回调结构体
volatile bool transfer_flag;//传输标志//channel:传输通道
//primary:是否使用primary结构体
//user:用户附加处理
void test_callback(unsigned int uiChannel, bool bPrimary, void *vpUser)
{ transfer_flag = false; /* 清除表示传输完成 */
}void dma_init(void){DMA_Init_TypeDef tDmaInit;DMA_CfgChannel_TypeDef tChnlCfg;DMA_CfgDescr_TypeDef tDescrCfg;CMU_ClockEnable(cmuClock_DMA, true); //初始化DMA tDmaInit.hprot = 0;tDmaInit.controlBlock = dmaControlBlock;DMA_Init(&tDmaInit);//设置回调函数 test_cb.cbFunc = test_callback;test_cb.userPtr = NULL;//设置通道tChnlCfg.highPri = false;tChnlCfg.enableInt = true;tChnlCfg.select = 0;tChnlCfg.cb = &(test_cb);DMA_CfgChannel(0, &tChnlCfg);//设置通道描述符tDescrCfg.dstInc = dmaDataInc4;tDescrCfg.srcInc = dmaDataInc4;tDescrCfg.size = dmaDataSize4;tDescrCfg.arbRate = dmaArbitrate4;tDescrCfg.hprot = 0;DMA_CfgDescr(0, true, &tDescrCfg);
}
main
/*********************************************Copyright (c)***********************************************
** File name: main.c
** Created by: Gui
** Version: V1.0.0
** Descriptions: DMA测试,内存间传输
*********************************************************************************************************/
#include "system.h"
#include "em_device.h"
#include "em_chip.h"
#include "em_cmu.h"
#include "em_int.h"
#include "delay.h"
#include "dma.h"
#include "bsp_led.h"uint32_t g_chip_tick = 0;uint32_t transfer_data[10] = {0,1,2,3,4,5,6,7,8,9};//传输数据
uint32_t ram_data[10];//存放数据数组int main(){transfer_flag = true;CMU_ClockEnable(cmuClock_HFPER, true); //前置芯片设置CMU_ClockEnable(cmuClock_GPIO, true);if(SysTick_Config(SystemCoreClockGet()/1000))while(1);//1ms的systick中断led_init();//PD4 PD5dma_init();DMA_ActivateAuto(0,true,(void *)&ram_data,(void *)&transfer_data,10 - 1);g_chip_tick = g_rtc_rtcFreq;LED0_ON;LED1_OFF;INT_Disable();//关闭中断while(transfer_flag);INT_Enable();//开启中断while(1){if(g_rtc_rtcFreq - g_chip_tick > 1000 || g_chip_tick > g_rtc_rtcFreq){LED0_OFF;LED1_ON;break;}}while(1){}
}
EFM32例程——DMA相关推荐
- EFM32例程——AES
硬件:EFM32GG230512 工具:keil5 AES实验 AES测试,AES加解密测试 打开时钟 /*********************************************Co ...
- EFM32例程——LETIMER
硬件:EFM32GG230512 工具:keil5 LETIMER实验 LETIMER测试,输出PWM波 初始化 /****************************************** ...
- EFM32例程——新建template工程
硬件:EFM32GG230512 工具:keil5 Simplicity Studio : 是Silicon Labs的一款开发软件,在里面有很多例程和工具. 1.创建CMSIS文件夹.这个文件夹存放 ...
- EFM32例程——ADC
硬件:EFM32GG230512 工具:keil5 ADC实验 简单测量电压 初始化 /******************************************************** ...
- EFM32例程——ACMP
硬件:EFM32GG230512 工具:keil5 ACMP实验 ACMP测试,ACMP测量判断输入电压高低 输出ACM_OUT获得高低信号 初始化 /************************ ...
- EFM32例程——DAC
硬件:EFM32GG230512 工具:keil5 DAC实验 DAC测试,使用DAC输出固定电压值 初始化 /******************************************** ...
- EFM32例程——CMU
硬件:EFM32GG230512 工具:keil5 CMU实验 CMU测试,输出时钟 初始化 /*********************************************Copyrig ...
- EFM32例程——EMU
硬件:EFM32GG230512 工具:keil5 EMU实验 EMU测试,进入em4休眠和唤醒 main /********************************************* ...
- EFM32例程——GPIO
硬件:EFM32GG230512 工具:keil5 GPIO实验 描述:简单的led闪烁. 具体参考em_gpio.c和em_gpio.h文件. IO初始化 //GPIO_DriveMode_Type ...
最新文章
- BeautifulSoup的高级应用 之 contents children descendants string strings stripped_strings
- python3生成器_Python3 生成器
- 在Java 8 Lambda中创建自己的循环结构
- USB Camera摄像头(UVC 与 gspca)
- OpenCV_05 形态学操作:连通性+腐蚀和膨胀+开闭运算+礼帽和黑帽
- highcharts php 动态数据,php动态传数据到highcharts的方法
- Unity StartCoroutine 和 yield return 深入研究
- 实战演练:MySQL RPM包定制化制作全过程
- putty连接TPYBord V202开发板教程
- 订阅个人Blog最新评论的方法
- 字符串的首地址做形参不能将变化传递回主函数
- WPF之基于路径的动画
- ST电机库 MCSDK-FUL_5.4.4 下载
- 分享四款H5怀旧小游戏魔塔+伏魔记+三国霸业+寻仙纪
- Arduino ESP8266 通过WiFi、串口与DMX灯光通讯
- python3.5安装PyHook3
- 一个高手的趋势交易、量化交易系统思路
- Hive05:Hive的进阶操作01之数据库和表的操作、数据类型
- VC中GDI绘图技术基础知识:hdc设备环境句柄,坐标系
- Vue2基础-el与data的两种写法(HTML版)