static void I2CInterrupt (); //объявление функции обработчика прерываний от I2C Файл hardware.c программы обслуживания 12С
„4
//Специальные функции (с учетом обслуживания I2C)
//------------------------------------------------------------------------
#include "hardware.h" //подключение специальных заголовков и определений tinclude "i2c.h" //подключение специальных заголовков и определений
//Константы инициализации системы
tdefine FOSC 14745600 //частота кварцевого резонатора в Гц
tdefine VALUEOFM 4 //соответствует PLLCFG_bit.MSEL=3
tdefine CCLK (FOSC*VALUEOFM) //CCLK = 58.9824 МГц
tdefine PCLK (CCLK/4) //соответствует VPBDIV_bit.VPBDIV=0;
tdefine PLOCK 0x0400
//FCCO = CCLK*2*P = 156...320 МГц, значит, P=2, что соответствует PLLCFG_bit.PSEL=l; tdefine VIC_TIMER0_bit (1 « VIC_TIMER0) tdefine VIC_l2C_bit (1 « VIC_I2C) volatile U16 I2C_addres; //адрес ячейки 24LC64 volatile U8 l2Cwr_byte; //байт данных для записи в 24LC64 volatile U8 wr_rd; //признак записи-чтения '24LC64
volatile U8 end_rd; //признак окончания чтения 24LC64
static U8 NUM_byte = 0; //порядковый номер переданного байта данных в
// 24LC64
//Инициализация системы -------------------------------------------------
void CPUinit(void) {
//Настройка PLL (ФАПЧ)
PLLCFG_bit.MSEL=3; //См. расчет PLL в секции tdefine этого файла PLLCFG_bit.PSEL=1; //См. расчет PLL в секции tdefine этого файла PLLFEED=0xAA; PLLFEED=0x55;
PLLCON_bit.PLLE=1; //Включение PLL (ФАПЧ) без подключения к ядру
PLLFEED=0xAA;
PLLFEED=0x55;
while(!(PLLSTAT & PLOCK)); //Ожидание замыкания петли PLL (ФАПЧ)
PLLCON_bit.PLLC=l; //Подключение PLL (ФАПЧ) к ядру
PLLFEED=0xAA; PLLFEED=0x55;
//Инициализация МАМ и тактовой частоты периферии MAMCR_bit.MODECTRL=0; //Первоначальное отключение МАМ MAMTIM_bit.CYCLES=3; //Рекомендуется для CCLK>40 МГц
MAMCR_bit.M0DECTRL=2; //Включение МАМ (функции МАМ полностью реализуются) VPBDIV_bit.VPBDIV=0; //См. расчет PLL в секции tdefine этого файла //Инициализация GPIO
PINSEL0=0; //Младшие линии Р0 являются GPIO PINSEL1=0; //Старшие линии Р0 являются GPIO //задание направлений линий GPIO IO0DIR=0x3000000;
//ОЬОООО ООН 0000 0000 0000 0000 0000 0000 Р0.10...Р0.16 - входы // Р0.24, Р0.25 - выходы
IOlDIR=0xFF0000;
//ОЬОООО 0000 1111 1111 0000 0000 0000 0000 Р1.16...Р1.23 - выходы //задание начальных уровней на выходах IO0CLR=0x3000000; //сброс .выходов Р0.24, Р0.25 IOlCLR=0xFF0000;
//ОЬОООО 0000 1111 1111 0000 0000 0000 0000 сброс выходов PI. 16...Р1.23
}
//------------------------------------------------------------------------
//Инициализация прерываний
//-------------------------------------------------------------------
void INTERRUPTSinit(void) {
// МЕММАР = 2; //переотобразит векторы прерываний в SRAM,
НА ГЛАВНУЮ | | ЧТО ТАКОЕ PIC ? | | ПРОГРАММАТОР | | ПРОЕКТЫ | | СТАТЬИ | | ССЫЛКИ | | КАРТА САЙТА |