Мигаем светодиодом используя счетчик в качестве прерывания на микроконтроллере CY8C21534

Сегодня мы с Вами напишем программный код, в котором будем мигать нашим светодиодом используя прерывания по таймеру, без использования функции задержки. Единственный нюанс в данном микроконтроллере, это отсутствие как токового отдельной функции прерывания. То есть, мы с Вами будем проверять, в цикле досчитал наш счетчик до максимального своего значения или нет. И если он досчитал (то есть перешел в ноль) мы выполняем некие действия, иначе мы игнорируем данный программный блок.
И так, так как мы хотим визуально видеть как будет моргать светодиод, мы с Вами возьмем 32-ух битный таймер (хотя при определенных хитростях можно обойтись счетчиком с меньшим разрядностью,  но об этом в следующих уроках):

Разместим его в наши блоки, и как мы видим, у нас занятые все блоки:

Теперь нам надо настроить наш счетчик. Тактирование счетчика подключим на сигнал VC3:

Теперь нам надо настроить сигнал тактирования VC3. Для этого мы его подключим к сигналу VC1, который на выходе у себя имеет частоту = SysClk/16.  При этом сигнал с VC3 , будет поступать на вход счетчика только после того, как количество импульсов на входе VC3 будет =150. И так мы получаем частоту тактирования нашего счетчика 10кГц. Если период  поставить = 10000, мы получим ровно 1 секунду., если 5000 — 0,5 секунды:

Напишем программный код:

#include <m8c.h> // part specific constants and macros
#include «PSoCAPI.h» // PSoC API definitions for all User Modules

DWORD count;

void main(void){
  M8C_EnableGInt ; // Uncomment this line to enable Global Interrupts
  LED_Start();
  Counter32_WritePeriod((10000-1)/2);
  Counter32_EnableInt();
  Counter32_Start();
  while (1){
      Counter32_ReadCounter(&count);
      if (count == 0){
         LED_Invert();
        while (!count)
        Counter32_ReadCounter(&count);
       }
    }
}