Página 1 de 1

delay

MensagemEnviado: 27 Abr 2012 01:51
por rcakto
Pessoal, alguem teria um exemplo de funcao delay us?
Estou usando o lpc1768 a 100Mhz
obrigado.

MensagemEnviado: 27 Abr 2012 08:01
por tronico
Código: Selecionar todos
__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   
}

MensagemEnviado: 27 Abr 2012 12:51
por rcakto
opa, vlw tronico, vou dar uma olhada e testar sua função.

Obrigado!!

MensagemEnviado: 28 Abr 2012 08:44
por tcpipchip
Pega antes o livro do CHRIS WRIGHT :)

MensagemEnviado: 28 Abr 2012 11:50
por rcakto
que livro??? passa o nome que eu dou um jeito de achar.

MensagemEnviado: 03 Mai 2012 12:50
por Viktor
Usa este código aqui. Ele faz uso do hardware interno do CM3 para obter uma contagem precisa do tempo



Código: Selecionar todos

#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) {}
 } 

MensagemEnviado: 03 Mai 2012 14:54
por fabim
Bota preciso nisto, hehehehe.
E o LPC tem tão poucos timers !!!! hehehe

MensagemEnviado: 03 Mai 2012 15:11
por chrdcv
Putz, quem precisa de implementar um delay por polling em um CM3? Cambada, ainda com o conceito de background foreground blocante? PuSta desperdício de CPU.

AnAl :oops: