реклама на сайте
подробности

 
 
> внешние прерывания. помогите плз
123kill12
сообщение Jul 10 2010, 18:19
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 96
Регистрация: 12-05-10
Пользователь №: 57 217



CODE
#include <intrinsics.h>
#include <stdio.h>
#include <nxp/iolpc1766.h>

#include "board.h"

#pragma section=".intvec"
#define FCCO_FREQ (300UL MHZ)
#define CCKL_DIV (3UL)
#define FCCLK_FREQ (FCCO_FREQ/CCKL_DIV)
#define FPCLK_FREQ (FCCLK_FREQ/4)
#define PCLK FPCLK_FREQ

volatile Int8U LedsState;
Int32U Reg;

void InitClock(void)
{
// 1. Init OSC
SCS_bit.OSCRANGE = 0;
SCS_bit.OSCEN = 1;
// 2. Wait for OSC ready
while(!SCS_bit.OSCSTAT);
// 3. Disconnect PLL
PLL0CON_bit.PLLC = 0;
PLL0FEED = 0xAA;
PLL0FEED = 0x55;
// 4. Disable PLL
PLL0CON_bit.PLLE = 0;
PLL0FEED = 0xAA;
PLL0FEED = 0x55;
// 5. Select source clock for PLL
CLKSRCSEL_bit.CLKSRC = 1; // Selects the main oscillator as a PLL clock source.
PCLKSEL0 = PCLKSEL1 = 0; // other peripherals 100/4 = 25MHz
// 6. Set PLL settings 300 MHz
PLL0CFG_bit.MSEL = 25-1;
PLL0CFG_bit.NSEL = 2-1;
PLL0FEED = 0xAA;
PLL0FEED = 0x55;
// 7. Enable PLL
PLL0CON_bit.PLLE = 1;
PLL0FEED = 0xAA;
PLL0FEED = 0x55;
// 8. Wait for the PLL to achieve lock
while(!PLL0STAT_bit.PLOCK);
// 9. Set clk divider settings
CCLKCFG = 3-1; // 1/3 Fpll
// 10. Connect the PLL
PLL0CON_bit.PLLC = 1;
PLL0FEED = 0xAA;
PLL0FEED = 0x55;
}

void GpioInit(void)
{
// Set to inputs
FIO0DIR = \
FIO1DIR = \
FIO2DIR = \
FIO3DIR = \
FIO4DIR = 0;

// clear mask registers
FIO0MASK =\
FIO1MASK =\
FIO2MASK =\
FIO3MASK =\
FIO4MASK = 0;

// Reset all GPIO pins to default primary function
PINSEL0 =\
PINSEL1 =\
PINSEL2 =\
PINSEL3 =\
PINSEL4 =\
PINSEL7 =\
PINSEL8 =\
PINSEL9 = 0;
}

Int32U cnt;
void TR0int(void)
{
cnt=0;
T0MR0=FCCLK_FREQ/200;
T0MCR=3;
SETENA0 |= (1<<1);
IP0=0;
T0TCR=1;
}

void ExInt(void)
{
IO2INTENF |= (1<<10);
SETENA0 |= (1<<18);
}

void TMR0_IRQHandler (void)
{
T0IR=1;
__enable_interrupt();
cnt++;
if ( cnt >= 0x20)
{
FIO2PIN = Reg;
Reg=Reg<<1;
if(Reg>128)
{
FIO2PIN=0;
Reg=4;
}
cnt = 0;
}
CLRPEND0 |= ~(1<<1);
}

void EINT0_IRQHandler (void)
{
IO2INTCLR |= (1<<10);
__enable_interrupt(); /* handles nested interrupt */
FIO1PIN=0x80000000;
CLRPEND0 |= ~(1<<18);
}


int main(void)
{
// Flash accelerator init
FLASHCFG = (0x5UL<<12) | 0x3AUL;
// Init clock
InitClock();
#if FCCLK_FREQ < 20000000
FLASHCFG = (0x0UL<<12) | 0x3AUL;
#elif FCCLK_FREQ < 40000000
FLASHCFG = (0x1UL<<12) | 0x3AUL;
#elif FCCLK_FREQ < 60000000
FLASHCFG = (0x2UL<<12) | 0x3AUL;
#elif FCCLK_FREQ < 80000000
FLASHCFG = (0x3UL<<12) | 0x3AUL;
#elif FCCLK_FREQ < 100000000
FLASHCFG = (0x4UL<<12) | 0x3AUL;
#endif
Reg=4;
// Init GPIO
GpioInit();
ExInt();
TR0int();


// Init LEDs
FIO2DIR = 0x000000ff;
FIO1DIR = 0xF0000000;


while (1)
{ /* Loop forever */

}
}


пограмма написана на подобие примеров IAR. работает все кроме внешнего прерывания.
вроде бы все сделал правильно. EINT0 приходится на 10 ножку P2 и флаг разрешения внешнего прерывания 0 находиться на 18 бите регистра разрешений прерываний.
в обработчике прерыванию ставлю брейк поинт и нечего нет(((

(у меня MT-link)

Сообщение отредактировал aaarrr - Jul 10 2010, 18:24
Причина редактирования: Оформление цитаты исходника
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- 123kill12   внешние прерывания. помогите плз   Jul 10 2010, 18:19
- - zltigo   Программы нужно начинать писать с пяти, максимум с...   Jul 10 2010, 19:03
- - DpInRock   Причина неработы - невнимательный копипаст.(Пару-т...   Jul 10 2010, 21:39
- - 123kill12   но они работают. я раньше не работал с ARM вообще...   Jul 10 2010, 22:14
|- - zltigo   QUOTE (123kill12 @ Jul 11 2010, 01:14) но...   Jul 10 2010, 22:30
- - 123kill12   да не наяву. я наблюдаю на плате как диодики морга...   Jul 10 2010, 23:23
|- - toweroff   Цитата(123kill12 @ Jul 11 2010, 03:23) ки...   Jul 10 2010, 23:32
|- - zltigo   QUOTE (123kill12 @ Jul 11 2010, 02:23) да...   Jul 11 2010, 00:12
- - 123kill12   я и делал по даташиту. брал пример через дебаг раз...   Jul 10 2010, 23:38
- - toweroff   бегло так по коду а чего это прерывания разрешаютс...   Jul 11 2010, 00:01
- - 123kill12   void TR0int(void) { cnt=0; T0MR0=FCCLK_FREQ/20...   Jul 11 2010, 08:20
|- - demiurg_spb   Цитата(123kill12 @ Jul 11 2010, 12:20) vo...   Jul 11 2010, 10:24
- - DpInRock   Не поленился (хотя это и очень трудно - папка с иа...   Jul 11 2010, 11:47
|- - sergeeff   Цитата(DpInRock @ Jul 11 2010, 14:47) (Я ...   Jul 12 2010, 06:29
- - Wano   Скажите,а в каком месте заносится указатель функци...   Jul 12 2010, 07:45
- - 123kill12   регистры прерываний у них разные. у меня книжка по...   Jul 12 2010, 09:01
- - 123kill12   перечитал даташит и нашел в чем накасячил. EXTINT...   Jul 12 2010, 12:04


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th July 2025 - 02:41
Рейтинг@Mail.ru


Страница сгенерированна за 0.01381 секунд с 7
ELECTRONIX ©2004-2016