使用MAXQ2010评估板读取温度

描述

本应用笔记演示了MAXQ微控制器应用开发的简便性,并提供了IAR嵌入式工作台®集成开发环境和MAXQ®评估(EV)板。演示简单开发过程的最简单方法是使用示例应用程序。本应用使用MAXQ2010 RISC微控制器上的UART、定时器和ADC来监视和报告温度。

应用概述

本文描述的示例应用使用MAXQ2010处理器和MAXQ2010评估(EV)板。本例展示了微控制器的UART、集成ADC控制器和器件定时器的用途。定时器用于每 500ms 生成一次中断。MAXQ2010端口与ADC接口,用于数据采集。然后通过将热敏电阻连接到MAXQ2010的ADC来获取温度读数。当发生中断时,MAXQ2010获取温度读数,并将结果输出到其串行端口之一。

读取 ADC 数据

在示例应用中,ADC控制器读取随温度变化的模拟输入。在读取任何输入之前,应用必须设置ADC的时钟、转换模式(单路或连续)、基准电压源(内部、外部或AVDD),以及感兴趣源的输入通道。需要初始化几个寄存器才能实现ADC转换。

 

 

void initADC ( )
{
  ADCN = 0x00; // Single conversion, external AVDD reference, divide-by-1 clock frequency.
  ADST = 0x10; //Select configuration register - read/write access on ADDATA.
  ADDATA = 0x00; //Channel 0 for AN0.
  ADDATA = 0x01; //Channel 0 for AN1.
  ADDATA = 0x02; //Channel 0 for AN2.
  ADDATA = 0x03; //Channel 0 for AN3.
  ADDATA = 0x04; //Channel 0 for AN4.
  ADDATA = 0x05; //Channel 0 for AN5.
  ADDATA = 0x06; //Channel 0 for AN6.
  ADDATA = 0x07; //Channel 0 for AN7, thermistor is attached on this channel.
  ADADDR = 0x07; //Selecting 0x07 as the last conversion configuration register.
}

 

 

初始化后,设置ADST寄存器的ADCONV位将启动转换。硬件通过清除相同的位来指示转换完成。要读取结果,请将ADST寄存器的ADIDX[3:0]位设置为目标输入通道。然后,ADDATA寄存器将保存相应通道的数字数据。在本示例应用中,AN7 被分配给 ADC 数据缓冲器 7。因此,要读取热敏电阻数据,请设置 ADST = 0x07 并读取 ADDATA。 对读取的数字值执行以下步骤以达到温度:

 

 

unsigned int getADCReading()
{
  unsigned short data = 0;

  ADST_bit.ADCONV = 1; //Enable conversion.
  while( ADST_bit.ADCONV == 0x01 ); //ADST.ADCONV bit indicates conversion in progress.
  ADST = 0x07; //We are interested in reading only the AN7 input, that is thermistor data.
  data = ADDATA; //Read AN7 data.
  return data;
}

 

 

计算 AN7 处的模拟输入,以伏特为单位,对应于读取的数字值。

计算与AN7处模拟输入相对应的热敏电阻电阻。

以摄氏度为单位计算温度。

写入串行端口

在示例应用中,MAXQ2010的一个串行端口用于输出当前温度读数。在将任何数据写入端口之前,应用程序必须设置波特率和串行端口模式。只需初始化几个寄存器即可启用串行端口通信。

 

 

void initSerial()
{
  SCON0_bit.SM1 = 1; // Set to Mode 1.
  SCON0_bit.REN = 1; // Enable receives.
  SMD0_bit.SMOD = 1; // Set baud rate to 16 times the baud clock.
  PR0 = 0x75F7; // Set phase for 115200 with an 8MHz crystal.
  SCON0_bit.TI = 0; // Clear the transmit flag.
  SBUF0 = 0x0D; // Send carriage return to start communication.
}

 

 

在UART中,单个寄存器发送和接收串行数据。写入 SBUF0 寄存器将启动传输。当串行端口上的数据可用时,读取 SBUF0 寄存器将检索输入。 示例程序使用以下函数将数据输出到串行端口。

 

 

int putchar(int ch)
{
  while(SCON0_bit.TI == 0); // Wait until we can send.
  SCON0_bit.TI = 0; // Clear the sent flag.
  SBUF0 = ch; // Send the char.
  return ch;
}

 

 

使用计时器生成周期性中断

此示例应用程序中使用的最后一个组件是 16 位计时器之一。定时器生成中断,每秒触发两次温度读数。要为此示例配置计时器,程序员必须设置重新加载值,指定时钟源,然后启动计时器。以下代码显示了初始化计时器 B 所需的步骤。

 

 

TB0V = 0x00000; // Set current timer value.
TB0R = 0x0F42; // Set reload value.
TB0CN = 0x0506; // Set Timer Clock = SysClk/1024, Reload Timer Mode, Interrupt Enabled.

 

 

使用此计时器作为此示例的中断源还需要执行几个步骤。MAXQ架构的中断必须在三个级别上启用:全局、每个模块和本地。使用 IAR™ 编译器,通过调用函数启用全局中断。此功能可有效设置中断和控制 (IC) 寄存器的中断全局使能 (IGE) 位。由于定时器B0位于模块4中,因此设置中断掩码寄存器(IMR)的位4以启用模块的中断。通过在定时器B控制寄存器(TB0CN)中设置启用定时器B中断(ETB)位来启用本地中断。这些步骤如下所示。 最后,使用中断需要初始化中断向量。IAR 的编译器允许为每个模块使用不同的中断处理函数。为特定模块设置中断处理程序需要使用 #pragma 向量指令。中断处理函数声明前面还应带有 __interrupt 关键字。示例应用程序通过以下方式声明模块 4 的中断处理程序。

__enable_interrupt()
TB0CN = 0x506; // Enable interrupts along with setting Timer Clock and run Timer.
IMR |= 0x10; // Enable the interrupts for module 4.
#pragma vector = 4
__interrupt void timerInterrupt()
{
// Add interrupt handler here.
}

  MAXQ2010评估板和IAR IDE设置

  运行示例应用程序需要以下设置。

  MAXQ2010评估板应具有:

  a. JU14 和 JU22 短路以启用通道 AN7 上的热敏电阻读数。

  b. JU9 引脚 2 和 3 短路以启用 UART0。

  c. JU8开路,让8MHz晶振源控制器。

  IAR IDE 项目选项应具有:

  a. lnkmaxq2010.xcl 作为链接器命令文件(从“项目”菜单中选择“选项”,然后从“类别”列表中选择“链接器”,然后选择“配置”选项卡)。

  b. maxq2010.ddf 作为设备描述文件(从“项目”菜单中选择“选项”,然后从“类别”列表中选择“调试器”,然后选择“设置”选项卡)。

  c. JTAG作为驱动程序(从“项目”菜单中选择“选项”,然后从“类别”列表中选择“调试器”,然后选择“设置”选项卡)。

  d. COMx端口设置以与JTAG通信(从“项目”菜单中选择“选项”,然后从“类别”列表中选择JTAG)。

  电脑超级终端设置应具有:

  a. PC COMx端口,MAXQ0的UART2010连接到该端口。

  二。配置属性为 115200 波特率、8 个数据位、1 停止位以及无奇偶校验和流量控制。

  该样应用使用MAXQ IAR嵌入式工作台V2.12A进行了测试。

  图 1

  显示了预期的输出。

寄存器

图1.示例应用程序输出。

结论

如这些代码示例所示,通过学习几个外设寄存器的细节,程序员能够轻松开发MAXQ2010微控制器和MAXQ系列处理器的应用。IAR 嵌入式工作台的添加允许使用符合 ANSI 标准的 C 代码编写代码,从而加快了开发过程。在此处下载此示例应用程序的完整源代码。阅读代码开头的说明和注释,了解有关所需设置和 IAR 编译器版本的详细信息。

审核编辑:郭婷

 

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分