Предыдущая Следующая

PLLCON_bit.PLLE=l; // Включение 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 .MODECTRL=2; //Включение МАМ (функции МАМ полностью реализуются)

VPBDIV_bit.VPBDIV=0; //См. расчет PLL в секции tdefine этого файла //Инициализация GPIO

PINSEL0=0; //Младшие линии РО являются GPIO PINSEL1=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 }

//------------------------------------------------------------------------

//Инициализация прерываний

//--------------------------------------------1---------------------------

void INTERRUPTSinit(void) {

// МЕММАР =2; // Переотобразит векторы прерываний в SRAM,

//в случае выполнения кода в SRAM //Установки контроллера прерываний

VICProtection =0; //К регистрам VIC можно обращаться в пользовательском режиме

VICIntEnClear = Oxffffffff; // Запретить все прерывания

VICDefVectAddr = (U16)&TimerInterrupt; // Адрес сервисной подпрограммы

// обработки прерываний VICIntSelect &= ~VIC_TIMER0_bit; // Линия IRQ от Таймера 0

VICVectAddrl = (U16) ScTimerlnterrupt; // Адрес сервисной подпрограммы

// обработки прерываний VICVectCntll = 0x20 I VIC_TIMER0; // Разрешить вектор прерывания от Таймера 0 VICIntEnable = VIC_TIMER0_bit; // Разрешить прерывание от Таймера 0

VICIntSelect &= ~VIC_UART0_bit; // Линия IRQ от UARTO.

VICVectAddr2 = (U16)&UART0Interrupt; // Адрес сервисной подпрограммы

// обработки прерываний VICVectCntl2 = 0x20 I VIC_UART0; // Разрешить вектор прерывания от UART0. VICIntEnable = VIC_UART0_bit; // Разрешить прерывание от UART0.

}

//------------------------------------------------------------------------

tpragma vector=0xl8

_irq _arm void irq_handler(void)

{

void (*interrupt_function)(); U16 vector;

vector = VICVectAddr; // Поместить адрес вектора в контроллер VIC

interrupt_function = (void(*)())vector;

(*interrupt_function) О; // Вызов функции вектора прерывания

VICVectAddr =0; // Сброс прерывания в VIC

}

//функция-обработчик прерывания от UART0 ---------------------------------

static void UARTOInterrupt()

//прием байта через UARTO //сброс прерывания при чтении U0RBR при приеме //индикация принятого через UART0 байта


Предыдущая Следующая



НА ГЛАВНУЮ | ЧТО ТАКОЕ PIC ? | ПРОГРАММАТОР | ПРОЕКТЫ | СТАТЬИ | ССЫЛКИ | КАРТА САЙТА
Hosted by uCoz