Основная функция (рисунок 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; //
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.