Pessoal, alguem teria um exemplo de funcao delay us?
Estou usando o lpc1768 a 100Mhz
obrigado.
Moderadores: 51, guest2003, Renie, gpenga
__asm void delay_us(int val){
inicio_us
MOV r1,#23
loop_us
SUBS r1,r1,#1
CMP r1,#0
BNE loop_us
dec_us
NOP
NOP
SUBS r0,r0,#1
CMP r0,#0
BNE inicio_us
sai_us
BX lr
}
#define DWT_CTRL (*(volatile unsigned long *) 0xe0001000) // Data Watchpoint and Trace counter register Control Register
#define DWT_CYCCNT (*(volatile unsigned long *) 0xe0001004) // Data Watchpoint and Trace counter register Cycle Count Register
#define SCB_DEMCR (*(volatile unsigned long *) 0xe000EDFC) // address of the register
#define TRCENA (1<<24)
//----------------------------------------------------------------------------------------------|
// Function Name : void init_delay_cycles(void) |
// Description : Inicializa contador de ciclos de instrução |
// Input : Nenhum |
// Return : Nenhum |
//----------------------------------------------------------------------------------------------|
void __init_delay_cycles(void)
{
SCB_DEMCR |= TRCENA; // Habilita blocos de TRACE e DEBUG
DWT_CTRL = DWT_CTRL | 1; // enable the counter
}
//----------------------------------------------------------------------------------------------|
// Function Name : void __delay_cycles(U32 n) |
// Description : Espera "n" ciclos de instrução do processador |
// Input : Número de ciclos a esperar |
// Return : Nenhum |
//----------------------------------------------------------------------------------------------|
void __delay_cycles(U32 n)
{
U32 tmp;
tmp = DWT_CYCCNT + n;
while(DWT_CYCCNT < tmp) {}
}
Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante