Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: помощь с ARM
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > ARM, 32bit
valeroon
Здравствуйте.Прошу помощи по началам работы с LPC2378(плата LPC-P2378-SK)
за основу был взят пример с диска в комплекте сплатой под который написал свой код(fiq прерывание от TMR0) Проблема в следующем-когда обработчик прерывания прописан в теле функции fiq,отладка в железе идет нормально-но стоит оформить обработчик в виде функции и вызывать ее при прирываниии то-кирдык.
В чем я не прав помогите.
Среда IAR отладка через JLINK.
garbuz
Цитата(valeroon @ Oct 14 2008, 09:32) *
В чем я не прав помогите.

В непоказании кода. ИМХО.
valeroon
Не вопрос
CODE

/*************************************************************************
*
* Used with ICCARM and AARM.
*
* © Copyright IAR Systems 2007
*
* File name : main.c
* Description : Define main module
*
* History :
* 1. Data : 28, February 2007
* Author : Stanimir Bonev
* Description : Create
*
* This example project shows how to use the IAR Embedded Workbench for ARM
* to develop code for the IAR LPC-P2378-SK board. It shows basic use of the I/O,
* the timer and the interrupt controllers.
* It starts by blinking USB Link LED.
*
* Note:
* After power-up the controller get clock from internal RC oscillator that
* is unstable and may fail with J-Link auto detect, therefore adaptive clocking
* should always be used. The adaptive clock can be select from menu:
* Project->Options..., section Debugger->J-Link/J-Trace JTAG Speed - Adaptive.
*
* $Revision: 1.1.2.2 $
******************************************************************************/
#include <inarm.h>
#include <stdio.h>
#include <iolpc2378.h>

#include "board.h"

#define bitset(var,bitno)((var)|=1<<(bitno))//set bit
#define bitclr(var,bitno)((var)&=~(1<<(bitno)))//clear bit
#define testbit(var, bitno)((var>> bitno)&0x01)//test bit


//***************Объявление переменных и прототипов функций*********************
int a,b;
void timer(void);
//******************************************************************************
#pragma vector=0x1C //определение положения вектора fiq на карте памяти(0x1C)
__fiq __arm void fiq_handler(void)//обработчик прерываний
{
a++;
timer();
T0IR_bit.MR0INT=1;
}
/*******************************************************************************
* Function Name: InitClock
* Parameters: void
* Return: void
*
* Description: Initialize PLL and clocks' dividers. Hclk - 288MHz,
* Cclk- 57.6MHz, Usbclk - 48MHz
*
******************************************************************************/
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
PLLCON_bit.PLLC = 0;
PLLFEED = 0xAA;
PLLFEED = 0x55;
// 4. Disable PLL
PLLCON_bit.PLLE = 0;
PLLFEED = 0xAA;
PLLFEED = 0x55;
// 5. Select source clock for PLL
CLKSRCSEL_bit.CLKSRC = 1; // Selects the main oscillator as a PLL clock source.
// 6. Set PLL settings 288 MHz
PLLCFG_bit.MSEL = 24-1;
PLLCFG_bit.NSEL = 2-1;
PLLFEED = 0xAA;
PLLFEED = 0x55;
// 7. Enable PLL
PLLCON_bit.PLLE = 1;
PLLFEED = 0xAA;
PLLFEED = 0x55;
// 8. Wait for the PLL to achieve lock
while(!PLLSTAT_bit.PLOCK);
// 9. Set clk divider settings
CCLKCFG = 5-1; // 1/5 Fpll - 57.6 MHz
USBCLKCFG = 6-1; // 1/6 Fpll - 48 MHz
PCLKSEL0 = PCLKSEL1 = 0; // other peripherals - 18MHz
// 10. Connect the PLL
PLLCON_bit.PLLC = 1;
PLLFEED = 0xAA;
PLLFEED = 0x55;
}

/*************************************************************************
* Function Name: GpioInit
* Parameters: void
* Return: void
*
* Description: Reset all GPIO pins to default: primary function
*
*************************************************************************/
void GpioInit(void)
{
// Set to inputs
IO0DIR = \
IO1DIR = \
FIO0DIR = \
FIO1DIR = \
FIO2DIR = \
FIO3DIR = \
FIO4DIR = 0;

// Enable Fast GPIO 0,1
SCS_bit.GPIOM = 1;

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

// Reset all GPIO pins to default primary function
PINSEL0 =\
PINSEL1 =\
PINSEL2 =\
PINSEL3 =\
PINSEL4 =\
PINSEL5 =\
PINSEL6 =\
PINSEL7 =\
PINSEL8 =\
PINSEL9 =\
PINSEL10= 0;
}
//******************************************************************************
void VicInit(void)
{
bitset(VICINTSELECT,4);// TMR0 int-FIQ
bitset(VICINTENABLE,4);// разрешить прер.
}
//******************************************************************************
//***************************Подпрограммы***************************************
void timer()
{
if(testbit(FIO1PIN,19)){bitset(FIO1CLR,19);}
else{bitset(FIO1SET,19);}// индикация входа в прерывание по TMR0
}
/*******************************************************************************
* Function Name: main
* Parameters: none
*
* Return: none
*
* Description: main
*
******************************************************************************/
void main(void)
{
// MAM init
MAMCR_bit.MODECTRL = 0;
MAMTIM_bit.CYCLES = 3; // FCLK > 40 MHz
MAMCR_bit.MODECTRL = 2; // MAM functions fully enabled
// Init clock
InitClock();
// Init GPIO
GpioInit();
// Init VIC
VicInit();
//********************Инициализация и настройка режимов TMR0********************
PCONP_bit.PCTIM0=1;//TMR0 запитан
T0TCR_bit.CR=1;//таймер сброшен
T0TC=0;T0PC=0;//счетчик таймера и предделителя сброшены
T0TCR_bit.CE=1;//разрешение счета
T0PR=0x0FFF;//коэфф предделителя

T0MR0=0x00FF;//значение совпадения c T0TC reg
T0MCR_bit.MR0I=1;//разрешить установку флага прерывания
T0MCR_bit.MR0R=1;//сброс счетчика T0TC по совпадению
T0TCR_bit.CR=0;//счет
T0IR_bit.MR0INT=1;//сброс флага рперывания по совпадению
//*************************Тест работы LED**************************************
bitset(FIO1DIR,19);// P1.19-выход
bitset(FIO1SET,19);// P1.19-установлен в 1
bitset(FIO1CLR,19);// P1.19-сброшен в 0
//******************************************************************************
__enable_interrupt();
while(1)
{b++;}
}
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2024 Invision Power Services, Inc.