В HTML      В PDF
микроэлектроника, микросхема, микроконтроллер, память, msp430, MSP430, Atmel, Maxim, LCD, hd44780, t6963, sed1335, SED1335, mega128, avr, mega128  
  Главная страница > Обзоры по типам > Микроконтроллеры

реклама

 
радиационно стойкие ПЗУ Миландр

Продажа силового и бронированного кабеля и провода в Москве

текст еще



Пример пользовательской программы с использованием отладочного комплекта MAXQ2000 Evaluation Kit

Доступность стандартных инструментов языка ANSI Си и сред разработки, включающих эти инструменты, значительно облегчает разработку пользовательских программ для новых или незнакомых процессоров. Инструменты для семейства процессоров MAXQ включают компилятор ANSI Си от компании IAR и интегрированную среду разработки IAR Embedded Workbench. С помощью этих программ, имея начальные знания о регистрах специального назначения MAXQ, разработчик может быстро и без усилий начать писать пользовательские программы для архитектуры MAXQ. Самый легкий способ продемонстрировать, насколько простым может быть процесс разработки для архитектуры MAXQ – пример создания пользовательской программы.

Программа, описываемая здесь, использует процессор MAXQ2000 и отладочный комплект MAXQ2000 Evaluation Kit. Процессор MAXQ2000 обладает широким спектром интегрированных периферийных устройств, включая:

  • 132-сегментный контроллер ЖКИ;
  • интегрированный порт SPI с режимами master и slave;
  • ведущее устройство шины 1-Wire;
  • два последовательных UARTа;
  • аппаратный умножитель;
  • три 16-битных таймера/счетчика;
  • сторожевой таймер;
  • 32-битные часы реального времени с предупредительными сигналами – субсекундным и времени суток;
  • интерфейс JTAG с поддержкой внутрисхемной отладки

Описание пользовательской программы

В этом примере используется контроллер ЖКИ, порт SPI в ведущем режиме, один из UARTов, аппаратный умножитель и один из таймеров. Таймер используется для генерирования периодических прерываний. В момент прерывания MAXQ2000 измеряет температуру и отправляет полученный результат на ЖКИ и один из своих последовательных портов. Порт SPI соединен с системой сбора данных (DAS) MAX1407, которая содержит АЦП. Значения температуры измеряются термистором, подключенным к АЦП, входящему в состав MAX1407.

Использование контроллера ЖКИ

Для использования ЖКИ следует сконфигурировать два управляющих регистра. Как только эти регистры будут установлены, сегменты ЖКИ можно будет включать установкой бита в одном из регистров данных ЖКИ. Приведенный ниже код показывает, как конфигурируется контроллер ЖКИ в описываемом примере пользовательской программы:

void initLCD()
{
   LCRA_bit.FRM = 7;     // Set up frame frequency.
   LCRA_bit.LCCS = 1;    // Set clock source to HFClk / 128.
   LCRA_bit.DUTY = 0;    // Set up static duty cycle.
   LCRA_bit.LRA = 0;     // Set R-adj to 0.
   LCRA_bit.LRIGC = 1;   // Select external LCD drive power.
   LCFG_bit.PCF = 0x0F;  // Set up all segments as outputs.
   LCFG_bit.OPM = 1;     // Set to normal operation mode.
   LCFG_bit.DPE = 1;     // Enable display.

Связь по SPI

Три регистра управляют различными режимами SPI, поддерживаемыми MAXQ2000. Для связи с MAX1407 используется приведенный ниже код для инициализации компонентов SPI и переведения их в нужный режим.

PD5 |= 0x070;              // Set CS, SCLK, and DOUT pins as output.
PD5 &= ~0x080;             // Set DIN pin as input.
SPICK = 0x10;              // Configure SPI for rising edge, sample input
SPICF = 0x00;              // on inactive edge, 8 bit, divide by 16.
SPICN_bit.MSTM = 1;        // Set Q2000 as the master.
SPICN_bit.SPIEN = 1;       // Enable SPI.

Как только установлена конфигурация регистров SPI, регистр SPIB используется для отправки и получения данных. Запись в регистр инициирует двунаправленную передачу данных между ведущим и ведомым устройствами SPI. Бит STBY в регистре SPICN сигнализирует об окончании передачи. Ниже показан код отправки и получения данных SPI.

unsigned int sendSPI(unsigned int spib)
{
   SPIB = spib;            // Load the data to send
   while(SPICN_bit.STBY);  // Loop until the data has been sent.
   SPICN_bit.SPIC = 0;     // Clear the SPI transfer complete flag.
   return SPIB;
}

Запись в последовательный порт

В примере пользовательской программы один из последовательных портов MAXQ2000 используется для вывода текущих значений измеренной температуры. Перед записью каких-либо данных в порт, пользовательская программа должна установить значение скорости передачи (в бодах) и режим работы последовательного порта. Как и в предыдущем примере, следует инициализировать несколько регистров для обеспечения передачи через последовательный порт.

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 = 0x3AFB;          // Set phase for 115200 with a 16MHz crystal.
   SCON0_bit.TI = 0;      // Clear the transmit flag.
   SBUF0 = 0x0D;          // Send carriage return to start communication.
}

Как и в случае передачи данных через SPI, один и тот же регистр используется для приема и передачи последовательных данных. Запись в регистр 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-битных таймеров. Таймер генерирует прерывания, которые запускают процесс считывания температуры дважды в секунду. Для конфигурирования таймера в этом примере, программист должен установить значение перезагрузки счетчика, задать источник тактового сигнала и запустить таймер. Приведенный ниже код отображает шаги, необходимые для инициализации таймера 0.

  T2V0 = 0x00000;        // Set current timer value.
  T2R0 = 0x00BDC;        // Set reload value.
  T2CFG0_bit.T2DIV = 7;  // Set div 128 mode.
  T2CNA0_bit.TR2 = 1;    // Start the timer.

Использование этого таймера в качестве источника прерывания требует еще нескольких шагов. Для архитектуры MAXQ прерывания необходимо разрешить на трех уровнях: глобально, для каждого модуля и локально. Используя компилятор IAR, можно разрешить прерывания глобально, вызвав функцию _enable_ interrupt(). Это эффективно устанавливает бит Interrupt Global Enable (IGE) регистра прерывания и управления (IC). Поскольку таймер 0 размещен в модуле 3, необходимо установить бит 3 в регистр маски прерывания (IMR) чтобы разрешить прерывания для модуля 3. Разрешение локального прерывания происходит в результате установки бита разрешения таймерных прерываний (ET2) в регистре А управления таймером (T2CNA). Выполнение этих шагов в примере пользовательской программы показано ниже.

  __enable_interrupt()
  T2CNA0_bit.ET2 = 1;          // Enable interrupts.
  IMR |= 0x08;                 // Enable the interrupts for module 3.

Наконец, использование прерываний требует инициализации вектора прерываний. Компилятор IAR поддерживает применение различных функций обработки прерывания для каждого модуля. Установка обработчика прерывания для конкретного модуля требует использования директивы #pragma vector. Описанию функции обработки прерывания должно также предшествовать ключевое слово _interrupt. В приводимом примере пользовательской программы обработчик прерывания для модуля 3 описывается следующим образом:

   #pragma vector = 3
  __interrupt void timerInterrupt()
{
      // Add interrupt handler here.
}

Заключение

Как показано на примерах этих функций, знание особенностей нескольких периферийных регистров позволяет программистам легко разрабатывать пользовательские программы для процессора MAXQ2000 и всего семейства процессоров MAXQ. Наличие АРМ IAR Embedded Workbench ускоряет процесс разработки, позволяя писать программы на ANSI-совместимом языке Си.

Полный исходный текст для этой пользовательской программы можно загрузить по адресу www.maxim-ic.com/MAXQ_code" target="_blank">www.maxim-ic.com/MAXQ_code. Прочтите описание и комментарии, помещенные в начале текста программы, касающиеся электрической схемы и подготовки к работе. Подробные сведения по использованию IAR Embedded Workbench приведены во второй статье данной публикации, озаглавленной Программирование в среде MAXQ.






 
Впервые? | Реклама на сайте | О проекте | Карта портала
тел. редакции: +7 (495) 514 4110. e-mail:info@eust.ru
©1998-2016 ООО Рынок Микроэлектроники