LPC2378 timer

Başlatan death_free, 02 Haziran 2010, 15:53:44

death_free

Öncelikler herkeze merhaba.
yeni temin ettiğim Olimexin LPC 2378 deneme kiti var.

timer la bir örnek yapmak istedim.forumdada yeniyim.İşe başlamadan forumda küçük bi gezinti yaptım ve " bunalmıs " arkadasımızın " https://www.picproje.org/index.php/topic,11865.msg98443.html#msg98443 " göndermiş oldugu sample denedim.
Ama ben eclipse kullanıyorum deneme kitiyle geldi.komutları eclipseye göre uydurmaya calıstım ama calıstıramadım.Timerla ufak bi örnek çalışması olan arkasımız varmı bu konuda bana yardım edebilecek.yada yaptıgım projeyi buraya postlayabilirim.İlgisi olan tüm arkadaslarıma teşekkürler.

<<<<<Aslana sormuşlar ensen niye kalın ? Aslan : "Kendi işimi kendim görürüm " demiş>>>>  World Of Warcraft Cataclysm  /// REalm : Frostmane  Nightwalkér

death_free

void Initialize(void);
void feed(void);

void IRQ_Routine (void)   __attribute__ ((interrupt("IRQ")));
void FIQ_Routine (void)   __attribute__ ((interrupt("FIQ")));
void SWI_Routine (void)   __attribute__ ((interrupt("SWI")));
void UNDEF_Routine (void) __attribute__ ((interrupt("UNDEF")));
void T0isr (void)  __attribute__ ((interrupt("IRQ"))) ;
/**********************************************************
                  Header files
 **********************************************************/
#include "LPC23xx.h"
#include "type.h"
#include "irq.h"
#include "target.h"
#include "fio.h"

// LED1 (MCIPWR on Olimex LPC-2378-STK has an indicator LED)

/**********************************************************
                       MAIN
**********************************************************/
int		r;							// loop counter (stack variable)
int	main (void) {

	// set io pins for led P0.21
	IODIR0 |= 0x00202000;	// pin P0.21 is an output, everything else is input after reset
	
	IOSET0 =  0x00202000;	// led off

	IOCLR0 =  0x00202000;	// led on
	VPBDIV = 0x00000002; //Set up peripheral clock for 30MHz
	//VPBDIV   = 0x00000001;         // VPB bus ile islemci ayni clock'u kullanacak
	PINSEL0 = 0x00000000;         // Portlar I/O pin amacli

	T0PR    = 0x00000002;         //Prescaler = 0, Pclk aynen kullanilsin
	T0TCR    = 0x00000000;         //Pclk'un yukselen kenarlarini say.
	T0MCR    = 0x00000003;         //Timer = T0MR0 olunca timeri resetle ve int uret

	// 60E6/2048 = 29Khz lik tasma peryodumuz olacak

	T0MR0   = 0x00000800;         //Timer0 icin tasma degerimiz (Sample time sayacimiz)
	T0TCR    = 0x00000001;         //Timer0'i baslat

	VICVectAddr4 = (unsigned)T0isr;   //Timer0 intlari icin vektor adres registeri
	VICVectCntl4 = 0x00000024;     		 //4 Nolu int enable (Timer0)
	VICIntEnable |= 0x00000010;      	//Timer 0 int enable

	while (1);
}
/******************************************************
        Timer 0 interrupt
******************************************************/
void T0isr (void)
{
    r=(r+1)&1;
   if (r==1)
	IOSET0 = 0x00200000;                          /* Turn off LED */
   else
    IOCLR0 = 0x00200000;                      /* Turn on LED */
    T0IR |= 0x00000001;         //Match 0 olustu flagini silelim
    VICVectAddr = 0x00000000;         //Dummy write to signal end of interrupt
}
/*  Stubs for various interrupts (may be replaced later)  */
/*  ----------------------------------------------------  */

void IRQ_Routine (void) {
	while (1) ;	
}

void FIQ_Routine (void)  {
	while (1) ;
}

void SWI_Routine (void)  {
	while (1) ;
}

void UNDEF_Routine (void) {
	while (1) ;
}


programda bikac deneme yaptım fakat görünen o ki bi timer olayı oluşmuyor T0isr kesme adresine dallanamıyorum.
bikac arastırma yaptım startup kodumda user mod kısmındaki F_BIT i kaldırmak gerektiği söylenmiş denedim oda olmadı.
                        sub   r0, r0, #SVC_STACK_SIZE
             msr   CPSR_c, #MODE_SYS|I_BIT|F_BIT    /* User Mode */
             mov   sp, r0

buda startup

/* ***************************************************************************************************************

	crt.s						STARTUP  ASSEMBLY  CODE 
								-----------------------


	Module includes the interrupt vectors and start-up code.

  *************************************************************************************************************** */

/* Stack Sizes */
.set  UND_STACK_SIZE, 0x00000004		/* stack for "undefined instruction" interrupts is 4 bytes  */
.set  ABT_STACK_SIZE, 0x00000004		/* stack for "abort" interrupts is 4 bytes                  */
.set  FIQ_STACK_SIZE, 0x00000004		/* stack for "FIQ" interrupts  is 4 bytes         			*/
.set  IRQ_STACK_SIZE, 0X00000004		/* stack for "IRQ" normal interrupts is 4 bytes    			*/
.set  SVC_STACK_SIZE, 0x00000004		/* stack for "SVC" supervisor mode is 4 bytes  				*/



/* Standard definitions of Mode bits and Interrupt (I & F) flags in PSRs (program status registers) */
.set  MODE_USR, 0x10            		/* Normal User Mode 										*/
.set  MODE_FIQ, 0x11            		/* FIQ Processing Fast Interrupts Mode 						*/
.set  MODE_IRQ, 0x12            		/* IRQ Processing Standard Interrupts Mode 					*/
.set  MODE_SVC, 0x13            		/* Supervisor Processing Software Interrupts Mode 			*/
.set  MODE_ABT, 0x17            		/* Abort Processing memory Faults Mode 						*/
.set  MODE_UND, 0x1B            		/* Undefined Processing Undefined Instructions Mode 		*/
.set  MODE_SYS, 0x1F            		/* System Running Priviledged Operating System Tasks  Mode	*/

.set  I_BIT, 0x80               		/* when I bit is set, IRQ is disabled (program status registers) */
.set  F_BIT, 0x40               		/* when F bit is set, FIQ is disabled (program status registers) */


.text
.arm

.global	Reset_Handler
.global _startup
.func   _startup

_startup:

# Exception Vectors

_vectors:       ldr     PC, Reset_Addr         
                ldr     PC, Undef_Addr
                ldr     PC, SWI_Addr
                ldr     PC, PAbt_Addr
                ldr     PC, DAbt_Addr
                nop							/* Reserved Vector (holds Philips ISP checksum) */
                ldr     PC, [PC,#-0xFF0]	/* see page 71 of "Insiders Guide to the Philips ARM7-Based Microcontrollers" by Trevor Martin  */
                ldr     PC, FIQ_Addr

Reset_Addr:     .word   Reset_Handler		/* defined in this module below  */
Undef_Addr:     .word   UNDEF_Routine		/* defined in main.c  */
SWI_Addr:       .word   SWI_Routine			/* defined in main.c  */
PAbt_Addr:      .word   UNDEF_Routine		/* defined in main.c  */
DAbt_Addr:      .word   UNDEF_Routine		/* defined in main.c  */
IRQ_Addr:       .word   IRQ_Routine			/* defined in main.c  */
FIQ_Addr:       .word   FIQ_Routine			/* defined in main.c  */
                .word   0					/* rounds the vectors and ISR addresses to 64 bytes total  */


# Reset Handler

Reset_Handler:  

				.extern TargetResetInit
                 ldr     SP, =_stack_end    @ temporary stack at Stack_Top
                 LDR R0, =TargetResetInit
                 MOV LR, PC
                 BX R0
				
				/* Setup a stack for each mode - note that this only sets up a usable stack
				for User mode.   Also each mode is setup with interrupts initially disabled. */
    			  
    			ldr   r0, =_stack_end
    			msr   CPSR_c, #MODE_UND|I_BIT|F_BIT 	/* Undefined Instruction Mode  */
    			mov   sp, r0
    			sub   r0, r0, #UND_STACK_SIZE
    			msr   CPSR_c, #MODE_ABT|I_BIT|F_BIT 	/* Abort Mode */
    			mov   sp, r0
    			sub   r0, r0, #ABT_STACK_SIZE
    			msr   CPSR_c, #MODE_FIQ|I_BIT|F_BIT 	/* FIQ Mode */
    			mov   sp, r0	
   				sub   r0, r0, #FIQ_STACK_SIZE
    			msr   CPSR_c, #MODE_IRQ|I_BIT|F_BIT 	/* IRQ Mode */
    			mov   sp, r0
    			sub   r0, r0, #IRQ_STACK_SIZE
    			msr   CPSR_c, #MODE_SVC|I_BIT|F_BIT 	/* Supervisor Mode */
    			mov   sp, r0
    			sub   r0, r0, #SVC_STACK_SIZE
    			msr   CPSR_c, #MODE_SYS|I_BIT	/* User Mode */
    			mov   sp, r0
				
				/* copy .data section (Copy from ROM to RAM) */
                ldr     R1, =_etext
                ldr     R2, =_data
                ldr     R3, =_edata
1:        		cmp     R2, R3
                ldrlo   R0, [R1], #4
                strlo   R0, [R2], #4
                blo     1b

				/* Clear .bss section (Zero init)  */
                mov     R0, #0
                ldr     R1, =_bss_start
                ldr     R2, =_bss_end
2:				cmp     R1, R2
                strlo   R0, [R1], #4
                blo     2b

				/* Enter the C code  */
                b       main

.endfunc
.end
<<<<<Aslana sormuşlar ensen niye kalın ? Aslan : "Kendi işimi kendim görürüm " demiş>>>>  World Of Warcraft Cataclysm  /// REalm : Frostmane  Nightwalkér

death_free

arkadaslar keilin sitesinden uvision 4 ü indirdim..eclipsede calısan blink örneğini çalıştıramadım .Demo olmasından kaynaklanan bi sorun olabilirmi sizce? nxp flash utility den yüklüyorum Buffer menüsündeki flash buffer operations kısmında işlemciye hex i attıgı görülüyor ama kartta bir hareket yok.demodan kaynaklanan bi sorunmudur sizce?
<<<<<Aslana sormuşlar ensen niye kalın ? Aslan : "Kendi işimi kendim görürüm " demiş>>>>  World Of Warcraft Cataclysm  /// REalm : Frostmane  Nightwalkér

ahmet2004

Demo ile bir alakası yok.Hangi kiti aldın.

death_free

olimex lpc-p2378 aldım
<<<<<Aslana sormuşlar ensen niye kalın ? Aslan : "Kendi işimi kendim görürüm " demiş>>>>  World Of Warcraft Cataclysm  /// REalm : Frostmane  Nightwalkér

ahmet2004

http://www.olimex.com/dev/soft/arm/LPC/LPC-P2148-BLINK-LED-ECLIPSE.zip

blink programını eclipse ile denedim benim kendi hazırladığım LPC2148 kitte çalışıyor bir sorun yok kodlarda.