当前位置: 首页 > news >正文

网站建设毕业设计选题如何做网站搬家

网站建设毕业设计选题,如何做网站搬家,公司建设网站的通知书,没公司怎么做网站前言 7801资料读起来不是很好理解,大概率是之前MTK的大佬写的。在此以简单的方式进行描述。我们做一个简单的规则组软件触发Demo。因为规则组通道只有一个数据寄存器,因此还需要用上DMA方式搬运数据到内存。 AC7801的ADC简介 7801的ADC是一种 12 位 逐…

前言

7801资料读起来不是很好理解,大概率是之前MTK的大佬写的。在此以简单的方式进行描述。我们做一个简单的规则组软件触发Demo。因为规则组通道只有一个数据寄存器,因此还需要用上DMA方式搬运数据到内存

AC7801的ADC简介

7801的ADC是一种 12 逐次逼近型 模拟数字转换器,拥有 12 路外部通道和 2 路内部通道,支持单次、连续、扫描或间断转换多种模式。模拟监控器特性允许应用程序监测输入电压是否超出设定的电压范围。

特性

12 位分辨率
通道输入电压范围: AVSS < Vin < AVDD
最大转换速率: 1Msps
14 路通道: 12 路外部通道, 1 路内部温度传感器( T-Sensor ), 1 路内部带隙基准(Bandgap ),每路通道可单独配置采样时间
转换序列分为 规则组( regular group )和注入组( injection group
        − 规则组:最多可配置 12 个通道
        − 注入组:最多可配置 4 个通道
8 种操作模式 ( 方便起见,称为 mode x x=1~8)
        − 规则组单通道单次转换 (mode1)
        − 规则组单通道连续转换 (mode2)
        − 规则组扫描 + 注入组扫描模式多通道单次转换 (mode3 注入组扫描模式 )
        − 规则组扫描 + 注入组间隔模式多通道单次转换 (mode3 注入组间隔模式 )
        − 规则组扫描 + 自动触发注入组扫描模式多通道单次转换 (mode4)
        − 规则组扫描 + 注入组扫描模式多通道连续转换 (mode5 注入组扫描模式 )
        − 规则组扫描+注入组间隔模式多通道连续转换(mode5 注入组间隔模式 )
        − 规则组扫描 + 自动触发注入组扫描模式多通道连续转换 (mode6)
        − 规则组子组扫描模式转换 (mode7)
        − 注入组子组扫描模式转换 (mode8)
通过内部软件触发或外部硬件触发启动 ADC
模拟监控器功能:
        − 配置为单个或所有通道电压检查
        − 监控通道电压是否低于低阈值或高于高阈值
中断:
        − 规则或注入组转换结束 (EOC End Of Conversion)
        − 注入组转换结束 (IEOC)
        − 模拟监控器事件 (AMO)
DMA 访问,仅用于规则组通道

典型操作流程

ADC 首先上电,然后可以通过内部 SWSTART 或外部触发源触发 ADC ,该触发来源于其它模块。触发后ADC 转换器单元开始工作,并将选择信号发送至输入通道选择器,根据规则或注入组通道序列逐个选择所需的通道。在一个通道完成转换后,转换结果将根据当前转换通道所属的组存储到 RDR 或 IDRx 中,并且产生相应的 EOC IEOC 标志置位。模拟监控器工作时,如果发生相应的事件则会出现相关的状态标志。

使用DMA

由于规则组通道只有一个数据寄存器,因此建议使用 DMA 功能 ,以避免在有多个规则组通道进行转换时,丢失转换结果。DMA 功能专用于规则组通道。只有规则组通道转换结束标志才会产生 DMA 请求。只有产生了 DMA 请求, DMA 才会将转换数据从ADC_RDR 搬运到用户指定的目标位置。

ADC流程

经典的初始化,DMA初始化。

ADC的初始化,185/186两行注释看的一脸懵逼

ADC的回调

DMA的回调

业务代码

旋转电位器查看打印值

由单个ADC改成多个ADC

AC7801的ADC写的注释相对比较完整,但是没说明软件触发从1个怎么改到多个。

使用时候需要注意下图中红框部分有些DISABLE和ABLE的参数,错了大概率就不可能正常采样。黄框部分就是从1个ADC改成3个需要修改的地方。

读取时候,只需要触发一次ADC0即可

具体代码如下:

#include "adc_sample.h"#define Delay5us                      (APB_BUS_FREQ/200000-1)
#define Delay5ms                      (APB_BUS_FREQ/200-1)
#define Delay1s                       (APB_BUS_FREQ-1)uint8_t g_dmaFinish = 0;     // DMA传输完成
uint8_t g_halfDmaFinish = 0; // DMA传输半完成
uint8_t g_dmaTransError = 0; // DMA传输错误
uint32_t g_ADCValueBuffer[DMA_TRANSFER_NUM + 1] = {0};
uint32_t g_timerCnt = 0;
uint16_t g_regularAverageSampleValue = 0; // 规则组采样平均值
uint16_t g_injectAverageSampleValue = 0;  // 注入组采样平均值
uint16_t g_adcInjectValue[4];
uint8_t g_AMOFlag = 0; // 模拟看门狗事件标志
/*
注意:EOC标志写0或读取ADC_RDR都会清除该标志位。
在进行debug时,如果有打开memory窗口或打开ADC寄存器。
该标志会被debug清除。
*/
uint8_t g_EOCFlag = 0;  // 规则组转换结束标志。
uint8_t g_IEOCFlag = 0; // 注入组转换结束标志。void ADC_Callback(void *device, uint32_t wpara, uint32_t lpara)
{if (wpara & ADC_STR_EOC_Msk) // 规则组中断标志{g_EOCFlag = 1;}if (wpara & ADC_STR_AMO_Msk) // 模拟监控中断标志{g_AMOFlag = 1;}
}void ADC_DMACallback(void *device, uint32_t wpara, uint32_t lpara)
{/*wparam为DMA通道状态,状态含义可参考CHANNELx_STATUS寄存器,CHANNELx_STATUS[2] 传输错误CHANNELx_STATUS[1] 半传输完成(相对设置的transferNum,如果半传输中断有使能,transferNum设为6,则DATA_TRANS_NUM为3时产生中断,进入回调)CHANNELx_STATUS[0] 传输完成*/if ((wpara & 0x01) == 0x1){g_dmaFinish = 1;}if ((wpara & 0x02) == 0x2){g_halfDmaFinish = 1;}if ((wpara & 0x04) == 0x4){g_dmaTransError = 1;}
}void ADC_DMAInit(void)
{uint32_t tmpMemStartAddr = (uint32_t)&g_ADCValueBuffer[0];uint32_t tmpMemEndAddr = (uint32_t)&g_ADCValueBuffer[DMA_TRANSFER_NUM + 1]; ///< Setting memory DMA addressDMA_ConfigType tmpDMAConfig;memset(&tmpDMAConfig, 0x00, sizeof(DMA_ConfigType));tmpDMAConfig.memStartAddr = tmpMemStartAddr;             // 设置DMA开始地址tmpDMAConfig.memEndAddr = tmpMemEndAddr;                 // 设置DMA结束地址tmpDMAConfig.periphStartAddr = (uint32_t)(&(ADC0->RDR)); ///< Move ADC DR to memorytmpDMAConfig.channelEn = ENABLE;                         ///< 使能DMAx通道tmpDMAConfig.finishInterruptEn = ENABLE;                 ///< 使能DMA传输完成中断tmpDMAConfig.halfFinishInterruptEn = DISABLE;            ///< 去能DMA半传输完成中断tmpDMAConfig.errorInterruptEn = ENABLE;                  ///< 使能DMA传输错误中断tmpDMAConfig.channelPriority = DMA_PRIORITY_VERY_HIGH;   ///< 设置DMA通道优先级,0~3 :优先级由低到高tmpDMAConfig.circular = ENABLE;                          ///< 使能循环模式,如果只想工作一次,设为0即可。tmpDMAConfig.direction = DMA_READ_FROM_PERIPH;           ///< 0: 从外设读取,1:从存储器读取tmpDMAConfig.MEM2MEM = DISABLE;                          ///< 0:在非存储器与存储器之间传输,1:在存储器与存储器之间传输tmpDMAConfig.memByteMode = DMA_MEM_BYTE_MODE_1TIME;      ///< MEM字分割传输数,0:32-bit,1:16-bit[15:0]; 2:16-bit[23:16][7:0];3:8-bit。详情可参考AC781X芯片手册  表20-2 可编程数据宽度&数据对齐tmpDMAConfig.memIncrement = ENABLE;                      ///< 1:MEM地址增加tmpDMAConfig.periphIncrement = DISABLE;                  ///< 0:外设地址固定tmpDMAConfig.memSize = DMA_MEM_SIZE_32BIT;               ///< 0:8-bit,1:16-bit,2:32-bittmpDMAConfig.periphSize = DMA_PERIPH_SIZE_16BIT;         ///< 0:8-bit,1:16-bit,2:32-bittmpDMAConfig.transferNum = DMA_TRANSFER_NUM;             ///< DMA通道传输长度tmpDMAConfig.periphSelect = DMA_PEPIRH_ADC0;             // 外设选择tmpDMAConfig.callBack = ADC_DMACallback;                 ///< 设置DMA中断回调DMA_Init(DMA0_CHANNEL0, &tmpDMAConfig); ///< ADC 使用DMA1通道,每个模块对应的DMA通道,可参考 AC781X芯片手册 表20-1 DMA请求列表NVIC_EnableIRQ(DMA0_CHANNEL0_IRQn);     ///< 使能DMA1中断请求
}void ADC_init()
{ADC_ConfigType tempAdcConfig;ADC_ConfigType *adcConfig;adcConfig = &tempAdcConfig;// 配置PINMUXGPIO_SetFunc(GPIOA, GPIO_PIN4, GPIO_FUN2);            ///< ADC_IN6 Analog function enableGPIO_SetFunc(GPIOA, GPIO_PIN3, GPIO_FUN2);            ///< ADC_IN7 Analog function enableGPIO_SetFunc(GPIOA, GPIO_PIN2, GPIO_FUN2);            ///< ADC_IN8 Analog function enableadcConfig->clkPsc = ADC_CLK_PRESCALER_1;              ///< Set ADC Clk = 24M/2/(0+1)adcConfig->scanModeEn = ENABLE;                       // 扫描模式adcConfig->continousModeEn = DISABLE;                 // 连续模式adcConfig->regularDiscontinousModeEn = DISABLE;       // 1:打开规则组间断转换模式adcConfig->injectDiscontinousModeEn = DISABLE;        // 1:打开注入组间断转换模式adcConfig->injectAutoModeEn = DISABLE;                // 1:自动注入模式adcConfig->intervalModeEn = DISABLE;                  // 1:注入组为间隔转换模式adcConfig->regularDiscontinousNum = 0;                //adcConfig->EOCInterruptEn = ENABLE;                   // EOC中断使能adcConfig->IEOCInterruptEn = ENABLE;                  // IEOC中断使能adcConfig->interruptEn = ENABLE;                      // 中断使能adcConfig->regularDMAEn = ENABLE;                     // 使能ADC DMAadcConfig->regularTriggerMode = ADC_TRIGGER_INTERNAL; // ADC触发源,内部触发adcConfig->regularSequenceLength = 3;                 // 规则组长度设为3adcConfig->dataAlign = ADC_DATA_ALIGN_RIGHT;          // 右对齐adcConfig->callBack = ADC_Callback;                   // 回调adcConfig->powerMode = ADC_POWER_ON;                  // 上电ADC_Init(ADC0, adcConfig);                            ///< ADC works Mode Config// ADC转换率计算公式: 转换时间= 采样时间+转换时间+同步时间  转换时间= (SPT+12)/ADC模块时钟频率+5/APB时钟频率// 备注:1.同步时间为5个APB CLK。2.ADC时钟频率 = APB时钟频率 /(分频系数+1)// 规则组通道设置ADC_SetRegularGroupChannel(ADC0, ADC_CH_7, ADC_SPT_CLK_7, 0); // 采样&转换时间= (7+12)/24000000 + 5/24000000 = 1usADC_SetRegularGroupChannel(ADC0, ADC_CH_8, ADC_SPT_CLK_7, 1); // 采样&转换时间= (7+12)/24000000 + 5/24000000 = 1usADC_SetRegularGroupChannel(ADC0, ADC_CH_6, ADC_SPT_CLK_7, 2); // 采样&转换时间= (7+12)/24000000 + 5/24000000 = 1us
}void ADC_SampleSoftwareTrigerADC(void)
{ADC_init();ADC_DMAInit(); // ADC DMA初始化while (1){// 每次转换数据清零memset(g_ADCValueBuffer, 0x00, sizeof(g_ADCValueBuffer));ADC_SoftwareStartRegularConvert(ADC0); /// 软件触发规则组采样udelay(8); // 需要采样8个通道,延时8us以保证数据采样完成printf("%d %d %d\r\n", g_ADCValueBuffer[0],g_ADCValueBuffer[1],g_ADCValueBuffer[2]);mdelay(100);}
}

转换率公式

http://www.yayakq.cn/news/359494/

相关文章:

  • 做美食网站视频下载企业车辆管理系统平台
  • 免费制作论坛网站福州建设厅网站
  • 长沙网站建设优化盐城个人网站建设
  • 介休城乡建设网站佛山 技术支持 骏域网站建设
  • 做什么类型网站可以吸引用户建站交流
  • 无锡网站建设标准html做游戏网站
  • 做方案的网站中核华泰建设有限公司的网站
  • 单页产品销售网站如何做推广网站登陆注册怎么做
  • 德德模板网站建设步骤精准大数据营销公司
  • 1万流量网站 服务器配置万盛建设局官方网站
  • 网站开发哪家公司电话国外上国内网站很慢
  • 唐山快速建站公司做一款app的流程
  • 个人做外贸网站平台百度热搜广告位多少钱
  • 怎么样免费创建网站百度seo插件
  • 用wordpress搭建的网站在线培训系统软件
  • 多光营销软件网站企业网站建设知识
  • 花钱做推广广告哪个网站好网站建设总体规划包括
  • 网站建设及维护机上位机软件开发平台
  • 网站cn和com有什么区别河南郑州解封通知
  • 合肥瑶海区寒假兼职工网站建设做网站时需要注意什么问题
  • 原创网络优化公司流程
  • 网站设计公司 深圳龙华采购
  • 十大外贸电商平台有哪些新网站 seo
  • 昌平沙河网站建设网站建设优化保定
  • 注册域名后怎么建设网站erp实施顾问
  • 浙江平台网站建设设计莱州网站建设有限公司
  • 无锡网站托管有没有专业做网站的
  • 深圳专业网站设计公司地址基于php网站开发环境
  • 开发大型网站的最主流语言腾讯云网站建设教程视频
  • 站长工具域名网站建设优化保定