Телесистемы
 Разработка, производство и продажа радиоэлектронной аппаратуры
На главную   | Карта сайта | Пишите нам | В избранное
Требуется программист в Зеленограде
- обработка данных с датчиков; ColdFire; 40 тыс.
e-mail:jobsmp@pochta.ru

Телесистемы | Электроника | Конференция «Микроконтроллеры и их применение»

посмотрите еще пример из keil (=)

Отправлено bp 22 сентября 2008 г. 10:38
В ответ на: Ответ: Добавил строку PCONP |= 1; Всё равно не работает. отправлено <font color=gray>Bitwood</font> 22 сентября 2008 г. 10:20


/*****************************************************************************
* timer.c: Timer C file for NXP LPC23xx/24xx Family Microprocessors
*
* Copyright(C) 2006, NXP Semiconductor
* All rights reserved.
*
* History
* 2006.09.01 ver 1.00 Prelimnary version, first Release
*
******************************************************************************/
#include "LPC23xx.h" /* LPC23xx/24xx Peripheral Registers */
#include "type.h"
#include "irq.h"
#include "target.h"
#include "timer.h"

volatile DWORD timer0_counter = 0;
volatile DWORD timer1_counter = 0;

/*****************************************************************************
** Function name: delayMs
**
** Descriptions: Start the timer delay in milo seconds
** until elapsed
**
** parameters: timer number, Delay value in milo second
**
** Returned value: None
**
*****************************************************************************/
void delayMs(BYTE timer_num, DWORD delayInMs)
{
if ( timer_num == 0 )
{
/*
* setup timer #0 for delay
*/
T0TCR = 0x02; /* reset timer */
T0PR = 0x00; /* set prescaler to zero */
T0MR0 = delayInMs * (Fpclk / 1000-1);
T0IR = 0xff; /* reset all interrrupts */
T0MCR = 0x04; /* stop timer on match */
T0TCR = 0x01; /* start timer */

/* wait until delay time has elapsed */
while (T0TCR & 0x01);
}
else if ( timer_num == 1 )
{
/*
* setup timer #1 for delay
*/
T1TCR = 0x02; /* reset timer */
T1PR = 0x00; /* set prescaler to zero */
T1MR0 = delayInMs * (Fpclk / 1000-1);
T1IR = 0xff; /* reset all interrrupts */
T1MCR = 0x04; /* stop timer on match */
T1TCR = 0x01; /* start timer */

/* wait until delay time has elapsed */
while (T1TCR & 0x01);
}
return;
}

/******************************************************************************
** Function name: Timer0Handler
**
** Descriptions: Timer/Counter 0 interrupt handler
** executes each 10ms @ 60 MHz CPU Clock
**
** parameters: None
** Returned value: None
**
******************************************************************************/
void Timer0Handler (void) __irq
{
T0IR = 1; /* clear interrupt flag */
IENABLE; /* handles nested interrupt */

timer0_counter++;

IDISABLE;
VICVectAddr = 0; /* Acknowledge Interrupt */
}

/******************************************************************************
** Function name: Timer1Handler
**
** Descriptions: Timer/Counter 1 interrupt handler
** executes each 10ms @ 60 MHz CPU Clock
**
** parameters: None
** Returned value: None
**
******************************************************************************/
void Timer1Handler (void) __irq
{
T1IR = 1; /* clear interrupt flag */
IENABLE; /* handles nested interrupt */

timer1_counter++;

IDISABLE;
VICVectAddr = 0; /* Acknowledge Interrupt */
}

/******************************************************************************
** Function name: enable_timer
**
** Descriptions: Enable timer
**
** parameters: timer number: 0 or 1
** Returned value: None
**
******************************************************************************/
void enable_timer( BYTE timer_num )
{
if ( timer_num == 0 )
{
T0TCR = 1;
}
else
{
T1TCR = 1;
}
return;
}

/******************************************************************************
** Function name: disable_timer
**
** Descriptions: Disable timer
**
** parameters: timer number: 0 or 1
** Returned value: None
**
******************************************************************************/
void disable_timer( BYTE timer_num )
{
if ( timer_num == 0 )
{
T0TCR = 0;
}
else
{
T1TCR = 0;
}
return;
}

/******************************************************************************
** Function name: reset_timer
**
** Descriptions: Reset timer
**
** parameters: timer number: 0 or 1
** Returned value: None
**
******************************************************************************/
void reset_timer( BYTE timer_num )
{
DWORD regVal;

if ( timer_num == 0 )
{
regVal = T0TCR;
regVal |= 0x02;
T0TCR = regVal;
}
else
{
regVal = T1TCR;
regVal |= 0x02;
T1TCR = regVal;
}
return;
}

/******************************************************************************
** Function name: init_timer
**
** Descriptions: Initialize timer, set timer interval, reset timer,
** install timer interrupt handler
**
** parameters: timer number and timer interval
** Returned value: true or false, if the interrupt handler can't be
** installed, return false.
**
******************************************************************************/
DWORD init_timer ( BYTE timer_num, DWORD TimerInterval )
{
if ( timer_num == 0 )
{
timer0_counter = 0;
T0MR0 = TimerInterval;
T0MCR = 3; /* Interrupt and Reset on MR0 */
if ( install_irq( TIMER0_INT, (void *)Timer0Handler, HIGHEST_PRIORITY ) == FALSE )
{
return (FALSE);
}
else
{
return (TRUE);
}
}
else if ( timer_num == 1 )
{
timer1_counter = 0;
T1MR0 = TimerInterval;
T1MCR = 3; /* Interrupt and Reset on MR1 */
if ( install_irq( TIMER1_INT, (void *)Timer1Handler, HIGHEST_PRIORITY ) == FALSE )
{
return (FALSE);
}
else
{
return (TRUE);
}
}
return (FALSE);
}

/******************************************************************************
** End Of File
******************************************************************************/



Составить ответ | Вернуться на конференцию

Ответы


Отправка ответа
Имя*: 
Пароль: 
E-mail: 
Тема*:

Сообщение:

Ссылка на URL: 
URL изображения: 

если вы незарегистрированный на форуме пользователь, то
для успешного добавления сообщения заполните поле, как указано ниже:
введите число 45:

Перейти к списку ответов | Конференция | Раздел "Электроника" | Главная страница | Карта сайта

Rambler's Top100 Рейтинг@Mail.ru
 
Web telesys.ru