飞思卡尔MCU代码参考:中断与ADC初始化

需积分: 15 5 下载量 4 浏览量 更新于2024-07-29 2 收藏 108KB DOC 举报
这份资源是一个关于飞思卡尔智能车竞赛的代码库,具有很高的参考价值,适用于学习和开发。代码涵盖了芯片MC9S12DG128的相关初始化设置,包括输入、中断和ADC(模数转换器)的配置。 在代码中,首先引入了相关的头文件`<hidef.h>`和`<mc9s12dg128.h>`,这两个文件分别提供了通用的定义和宏以及特定芯片的衍生信息。`mc9s12dg128.h`包含了对MC9S12DG128微控制器的定义,该芯片是飞思卡尔公司的一款16位单片机,常用于嵌入式系统和智能车项目。 `#pragma LINK_INFO DERIVATIVE "mc9s12dg128b"`这一行是链接器指令,指定使用MC9S12DG128B这个衍生型号。尽管原始代码中注释掉了`#include"sci.h"`,这通常包含的是串行通信接口(SCI)的头文件,可能在完整的代码中用于实现串行通信功能。 接下来定义了一些标志变量,如`sciflag1`和`flag1`,以及全局变量`char cflag`,`int i, j, m, n`和二维数组`byte cs[40][60]`。这些变量可能在代码的不同部分中起到关键作用,例如状态标志、循环计数或存储数据。 `InputInit()`函数负责初始化输入通道。在这里,它禁用了通道0的中断(`TIE_C1I=0`),将通道0配置为输入捕获模式(`TIOS_IOS1=0`),并设置了上升沿触发(`TCTL4_EDG1A=1`)和下降沿不触发(`TCTL4_EDG1B=0`)。这表明代码可能涉及定时器和边沿检测,用于测量输入信号的变化。 `init_IRQ()`函数初始化外部中断。它开启了IRQ选择为边沿敏感(`INTCR_IRQE=1`)并允许外部中断(`INTCR_IRQEN=1`)。这确保了系统可以响应外部事件。 `ADCInit()`函数则初始化模数转换器ATD0。它开启ATD电源(`ATD0CTL2_ADPU=1`),清空所有标志(`ATD0CTL2_AFFC=1`),启用转换结束中断(`ATD0CTL2_ASCIE=1`),并设置了转换序列长度(`ATD0CTL3_S1C=1`)等。这些设置允许连续进行2次转换,每次8位精度,且在Freeze模式下继续转换。通过调整`PRS`寄存器(在这里设为5),可以控制AD时钟的速度,以适应不同的采样需求。 这份代码展示了如何配置飞思卡尔微控制器进行输入处理、中断响应以及模数转换,这些都是智能车竞赛中常见的技术需求。开发者可以从中学习到如何利用这些功能来实现智能车的传感器读取、信号处理和控制系统设计。