PROGRAM start RSEG INTRAMSTART_REMAP RSEG INTRAMEND_REMAP RSEG ICODE:CODE:ROOT(2) CODE32
#define __ram_end SFB(INTRAMEND_REMAP) ARM_MODE_USER EQU 0x10 ARM_MODE_IRQ EQU 0x12 I_BIT EQU 0x80 F_BIT EQU 0x40 stack_irq EQU 0x100 stack_user EQU 0x700 AIC_IVR EQU 0xFFFFF100 EXTERN init_perif EXTERN main org 0 B init org 0x18 mov pc, #0x40 org 0x40 sub lr, lr, #4 stmdb sp!, {r0 - r12,lr} ldr r0, =AIC_IVR ldr pc, [r0] ldr r0, =init_perif mov lr, pc mov pc, r0 msr CPSR_c, #ARM_MODE_IRQ | I_BIT | F_BIT ldr sp,=__ram_end msr CPSR_c, #ARM_MODE_USER | I_BIT | F_BIT ldr sp,=__ram_end sub sp, sp, #stack_user ldr r0, =main mov lr, pc mov pc, r0 ENDMOD
END ----------------------------------------------------------------------- #include "ioat91sam7a3.h"
unsigned char *a; unsigned char *b; unsigned int i,j;
init_perif() { a = (unsigned char *) 0x300; b = (unsigned char *) 0x340; i = 0; while (i<16) { *(a+i) = (char) i; i++; } AT91C_BASE_RSTC -> RSTC_RMR = 0xA5000001;
AT91C_BASE_WDTC -> WDTC_WDMR = 0x00008000;
AT91C_BASE_CKGR -> CKGR_MOR = 0x00000F01; AT91C_BASE_PMC -> PMC_MCKR = 0x00000019; AT91C_BASE_PMC -> PMC_SCER = 0x00000001; AT91C_BASE_PMC -> PMC_PCER = 0x00001804;
AT91C_BASE_PIOA -> PIO_PDR = 0x0003FFF0; AT91C_BASE_PIOA -> PIO_ASR = 0x0003F800; AT91C_BASE_PIOA -> PIO_BSR = 0x000007F0; AT91C_BASE_SPI0 -> SPI_CR = 0x00000082; AT91C_BASE_SPI0 -> SPI_MR = 0x0F0E0019; AT91C_BASE_SPI0 -> SPI_IDR = 0x000003FF; AT91C_BASE_SPI0 -> SPI_CSR[0] = 0x1FFFFF02; AT91C_BASE_PDC_SPI0 -> PDC_TPR = (unsigned int) a; AT91C_BASE_PDC_SPI0 -> PDC_TCR = 64;
AT91C_BASE_SPI1 -> SPI_CR = 0x00000082; AT91C_BASE_SPI1 -> SPI_MR = 0x0F0E0018; AT91C_BASE_SPI1 -> SPI_IDR = 0x000003FF; AT91C_BASE_SPI1 -> SPI_CSR[0] = 0x00FFFF02; AT91C_BASE_PDC_SPI1 -> PDC_RPR = (unsigned int) b; AT91C_BASE_PDC_SPI1 -> PDC_RCR = 16; }
---------------------------------------------------------------------------------------------------- #include "ioat91sam7a3.h"
main () { AT91C_BASE_PDC_SPI0 -> PDC_PTCR = 0x00000102; AT91C_BASE_PDC_SPI1 -> PDC_PTCR = 0x00000201; AT91C_BASE_SPI1 -> SPI_CR = 0x00000001; AT91C_BASE_SPI0 -> SPI_CR = 0x00000001; while (1); }
----------------------------------------------------------------------------
Прерывания я не использую
мне важно было зафиксировать факт передачи на осцыле) и посмотреть что PDC в память контроллера записал)
|