样例程序:CC31 + A/D + PEC 1. 简介 本程序实现功能如下: z 使用 CC31 比较匹配中断去启动 ADC (Injected mode)。 z ADC 转换结束后,存放于 ADC_DAT2 中的转换结果通过 PEC 传送到用户指 定的数组地址。 z PEC 传送 10 次后,产生 End of PEC 中断,在中断处理程序中重置 PEC 控制 寄存器。重新使能 PEC。 使用到的模块:CAPCOM2,ADC, PEC。 2. 模块介绍 2.1 CAPCOM2 XC164CM 提供了 CAPCOM2 模块,拥有 16 路捕获比较通道,两个定时器。其中 CC16 – CC25 具有外部接口,可用于外部信号捕获或比较模式。CC26 – CC31 没有外部接 口,仅可以用于内部比较匹配中断。 关于 CAPCOM2 模块功能的详细介绍,请参照 XC164CM 用户手册。 2.2 ADC XC164CM 系列提供 14 路转换通道,8/10 bit 转 换精度,8 位最快转换时间 2.15us。 工作模式: Fix channel single conversion:转换指定通道一次。 Fix channel continuous conversion:重复转换指定通道 Auto scan single conversion: 转换指定组的通道一次。 Auto scan continuous conversion:重复转换指定组的通道。 Wait for read mode:当一次转换结束后,停止 A/D 转换直至上次转换结 果 被读取。 Channel injection mode: 在当前转换组中插入对指定通道的转换。 关于 ADC 模块功能的详细介绍,请参照 XC164CM 用户手册。 2.3 PEC XC164CM 提供 8 路类 DMA 功能的 PEC 通道。可以由任何中断请求触发,在任意两 个内存地址之间传递字节数据或字数据。仅仅从当前 CPU 进程中“窃取”一个时钟周期去 完成,无需保存/恢复现场。占用时间少,效率高。 每路 PEC 通道拥有独立的计数器,用于指定传输的次数,当传输完指定次数后,可以 触发 EOP (End of PEC)中断。 关于 PEC 模块功能的详细介绍,请参照 XC164CM 用户手册。 3.操作流程 开始 DAVE 配置 生成代码 添加用户程序 编译、下载、运行 4 DAVE 配置 4.1 New project: select XC164cm 4.2 Project settings System clock 4.3 配置 CAPCOM2 使能模块 不使用 staggered mode Set Timer 7 as timer mode, start after initialization, set the overflow time 选择 Configure Channel 31。 设置为 Compare mode 2 Set the T7 as the timer base for cc31. Set the compare value for cc31. 选中 CC2_vInit 以使 DAVE 生成 cc2.c 文件。 4.4 配置 ADC Enable the clock 选择 enhanced mode, enable end-of-injected-conversion interrupt to trigger the PEC 选择如下配置 1. the fixed channel, 2. wait for read mode Set the injection mode control 1. enable channel injection 2. select the channel 3. select the capcom1/2 for trigger(cc31) 4. resolution 端口设置 :使用 AN0. 中断优先级配置: 将中断源从右边拖到左面表格的对应位置 Function 页面:选中 ADC_vInit 以生成文件 adc.c。 4.5 配置 PEC 根据 ADC error INT 的中断优先级和组别,选择 PEC 通道,在此选择 通道 2。 配置如下参数: 在 functions 页 4. 6 中断设置 在中断配置部分,选中 End of PEC 中断。 配置 EOP 中断的优先级。 在 Functions 页,选中 INT_vInit 以便生成 INT.c 文件。 5.利用 DAVE 生成代码。 6. 修改代码,添加用户自定义代码 6.1 生成 uVsion 工程文件。 做完以上步骤之后工程文件夹中会出现 keil 图标的 dpt 文件,双击进入 keil 环境。第 一次进入 keil 环境需要设置:project-options for target ‘target 1’。如下所示: 6.2 修改 Main.c 添加 while(1); // USER CODE BEGIN (Main,4) while(1); // 添加 while(1)。 // USER CODE END。 6.3 修改 ADC.c 1. 定义用于存储 A/D 转换结果的数组。. //************************************************************** // @Global Variables //************************************************************** // USER CODE BEGIN (ADC_General,7) unsigned int ADC_Result[10]; // USER CODE END 2. 添加 PEC 目标地址(void ADC_vInit(void)) // USER CODE BEGIN (Init,3) DSTP6 = _sofADC_Result); //set destination pointer // USER CODE END 6.4 修改 INT.c 1. 声明引用的全局变量. //******************************** // @Imported Global Variables //**************************************************** // USER CODE BEGIN (INT_General,6) extern unsigned int ADC_Result [10]; // USER CODE END 2. 在 EOP 中断中添加重置 PEC 控制寄存器的语句,以便重新使能 PEC 传输。 void INT_viEOP(void) interrupt EOPINT { // USER CODE BEGIN (EOP,2) // USER CODE END if(PECISNC_C6IR) // end of PEC channel 6 { PECISNC_C6IR = 0; // USER CODE BEGIN (EOP,9) PECC2 = 0x520A; ; // 重置 PEC 寄存器 DSTP2 = _sof_(ADC_Result); //设置目标地址 // USER CODE END } } // End of function INT_viEOP 7. 编译 图标进行编译连接。如有错误进行更改,直到出现‘0 Errors found.’。 点击 8.下载 利用 memtool 软件将上面生成的 h86 文件下载到单片机。 打开 memtool 软件,点击菜单 Targe-Change,选择 XC164CM-8F。界面如下: 点 击 OK 出现如下对话框。 点击‘connect’进行通讯连接。通讯成功之后,按照顺序 open file…-select all-add sel.>>将需要下载的 h86 文件添加到右边框中,然后选择’Erase…’和’Program’进行擦除、编 程。如有必要可点击’Verify’进行校验。 9.运行