Цитата(alex_tt @ Apr 3 2006, 15:14)

А не могли бы вы выложить хотя бы образец, а то я уже окончательно запутался, как сделать задержку на n микросекунд. Уже перерыл кучу примеров, они все для icc, а для MSP430 IAR они не идут. Заранее большое спасибо.
Код
/* --- sw_del_us() ---------------------------------------------------------------------------------------- **
* Задержка в us для 6 МГц. Программная. Зависит от свободных ресурсов.
* Предполагается, что идиотскую задержку в 0 мкс никто не задаст!
* -------------------------------------------------------------------------------------------------------- */
void sw_del_us( unsigned int us )
{
do
{ _NOP(); _NOP(); _NOP();
} while( --us );
}
/* --- ini_delay() ---------------------------------------------------------------------------------------- **
*
* -------------------------------------------------------------------------------------------------------- */
void ini_delay( void )
{
// Настроим таймер А
TACTL = TASSEL_2 // тактирование от SMCLK
+ ID_0 // входной делитель 1:1
+ MC_2; // Непрерывный режим: таймер считает вверх к 0ffffh
TACCTL1 = TACCTL2 = CCIE | CCIFG; // Старт прерывания для милисекундных тиков и клавиатуры
}
/* --- delay_us() ----------------------------------------------------------------------------------------- **
* Задержка в us. Накладные расходы - около 30 тактов, т.е. при 6МГц - +5us
* Используем Compare0 таймера А.
* -------------------------------------------------------------------------------------------------------- */
void delay_us( unsigned int us )
{
if ( us < 7 )
{ sw_del_us( --us );
return;
}
us = ( us * 3 ) / 2;
for ( TACCR0 = TAR, TACCR0 += us, TACCTL0 = CCIE; TACCTL0 & CCIE; )
;
}
/* --- TIMERA0_isr() -------------------------------------------------------------------------------------- **
* 6 * 2 - 0xffec Timer A CC0
* Compare0 - микросекундные задержки
* -------------------------------------------------------------------------------------------------------- */
#pragma vector=TIMERA0_VECTOR
__interrupt void TIMERA0_isr( void )
{
TACCTL0 &= ~CCIE;
}