Разработка биометрического комплекса на основе считывания отпечатка пальца, страница 14

Основная функция (рисунок 8.12). Это главная функция комплекса. В начале ее происходит установка регистров микроконтроллера, для того чтобы задать необходимый режим работы (подробно о регистрах можно узнать из документации на MC9S12NE64). Также определяются сетевые параметры, такие как IP-адрес комплекса, IP-адрес шлюза, маска сети. В данном случае это 192.168.1.7, 192.168.1.1, 255.255.255.0 соответственно. Далее реализуется алгоритм управления комплексом.

Листинг 8.12

void main(void)

{

  CLKSEL=0;

  CLKSEL_PLLSEL = 0;       /* Select clock source from XTAL */

  PLLCTL_PLLON = 0;         /* Disable the PLL */

  SYNR = 0;                            /* Set the multiplier register */

  REFDV = 0;                          /* Set the divider register */

  PLLCTL = 192;

  PLLCTL_PLLON = 1;          /* Enable the PLL */

  while(!CRGFLG_LOCK);    /* Wait */

  CLKSEL_PLLSEL = 1;        /* Select clock source from PLL */

  INTCR_IRQEN = 0;                     /* Disable the IRQ interrupt

localmachine.localip = *((UINT32 *)ip_address); // присвоение устройству IP-адреса

localmachine.defgw   = *((UINT32 *)ip_gateway);            // указание IP-адреса шлюза

localmachine.netmask = *((UINT32 *)ip_netmask); // указание маски сети

localmachine.localHW[0] = hard_addr[0];  //

localmachine.localHW[1] = hard_addr[1];  //

localmachine.localHW[2] = hard_addr[2];  //          побайтное присвоение устройству

localmachine.localHW[3] = hard_addr[3];  //                               MAC-адреса  localmachine.localHW[4] = hard_addr[4];  //

localmachine.localHW[5] = hard_addr[5];  //

arp_init();

(void)udp_init();

 init_our_udp();

RTI_Enable ();

TIOS=0xf0;            // IOC7 output GPIO

TSCR1=0x80;           // timer enable           

for (;;)

                     {INT8 spi_data;

                     INT32 i,c,temp;

                     UINT8* row;

                     TCTL1_OM7=1;        // PT7=1

                      TCTL1_OL7=1;        //

                       SS_disable();

                       wait_button();          // ожидание нажатия на кнопку sw2

                       recieve_packet();     // прием пакета

                       send_our_udp(test,10);        // отправка тестового пакета в сеть

for(;;){                                       

             wait_button();                    // ожидание нажатия на кнопку sw2

             init_SPI_master();              // инициализация порта SPI как мастер

             init_FPC1010();                 // инициализация датчика FPC1010                                                read_image_and_transmit();  // построчное считывание и передача

   //изображения отпечатка

             SPI_disable();         // закрытие порта SPI

             }

         }         

}

Функция ожидания нажатия на кнопку (рисунок 8.13). Основой данной функции является условие на проверку того, нажата кнопка или нет. После определения нажатия необходимо произвести небольшую задержку, чтобы исключить так называемый «дребезг контактов».

Листинг 8.13

void wait_button(void){

          int32 i;

         PTG_PTG0=0;

         while(PTH_PTH4==1){;}     // анализ нажатия на кнопку

         PTG_PTG0=1;

for(i=0;i<1000000;i++) {;}

 }

Функции разрешения/запрещения приема/передачи (рисунки 8.14, 8.15). С помощью необходимых регистров на вывод PT6 подается либо высокий, либо низкий уровень.

Листинг 8.14

void SS_enable(void){

TCTL1_OM6=0;        // PT6=0

         TCTL1_OL6=0;         //

}

void SS_disable(void){

TCTL1_OM6=1;        // PT6=1

         TCTL1_OL6=1;         //

}

Функция аппаратного сброса датчика (рисунок 8.16). Функция воспроизводит импульс длительностью 1 мкс через порт T. Циклы задержки по 25 тактов выбраны из расчета, что один такт имеет длительность 40 нс, в итоге получаем задержку в 1 мкс.

Листинг 8.15

void reset_FPC1010(void){

         int32 i;

TCTL1_OM7=1;        // PT7=1

         TCTL1_OL7=1;         //