AlexandrY (24.05.2006 14:12, просмотров: 1) ответил Vit2005 на LPC2138 и реализация 1-wire MicroLan
Прецизионную задержку можно сделать так. Определяем макрос US_DELAY, а саму функцию пишем на asm-е и помещаем в RAM по желанию запрещая прерывания на время выполнения функции.
Хотя если думаете применять RTOS то так делать категрически нельзя. Можно использовать Capture/Compare модуль для аппаратного измерения и формирования задержек.
<pre>
#define SYS_CLK 60000000
#define US_DELAY(t) us_Delay(t*(SYS_CLK/10000000) - 1)
/*
*********************************************************************************************************
Задержка на (t+1)*10 тактов
*********************************************************************************************************
*/
#pragma arm
void us_Delay(int t)
{
long r1;
__asm
{
MOV r1,#0
B label1
label2:
NOP
NOP
NOP
NOP
NOP
ADD r1,r1,#1
label1:
CMP r1,t
BLT label2
NOP
}
}
</pre>