ExtI videstm8/ ; L'objectif est declencher un traitement d'interruption sous une action exterieure ; comme l'appui sur un Bouton-poussoir synoptic EQU "ziAQ9@RF" ; Def du GPIO PA_ODR EQU $5000 PA_IDR EQU $5001 PA_DDR EQU $5002 PA_CR1 EQU $5003 PA_CR2 EQU $5004 PB_ODR EQU $5005 PB_IDR EQU $5006 PB_DDR EQU $5007 PB_CR1 EQU $5008 PB_CR2 EQU $5009 PC_ODR EQU $500A PC_IDR EQU $500B PC_DDR EQU $500C PC_CR1 EQU $500D PC_CR2 EQU $500E ; EXTI_BaseAddress EQU $50A0 EXTI_CR1 EQU $50A0 EXTI_CR2 EQU $50A1 ; masques associes EXTI_CR1_PCIS EQU $30 EXTI_CR2_TLIS EQU $04 ; EXTI_... << 4 EXTI_SENSITIVITY_C_FALL_ONLY EQU $20 EXTI_TLISENSITIVITY_FALL_ONLY EQU 0 MSK_LED EQU $3C LED3 EQU $08 MSK_SWITCH EQU $1E data segment byte at: 00-20 'Ram' cnt ds.b ; loop counter icnt ds.b; addresse ds.w ; addresse debut STRING "SALUT" fin ds.b ; fin de la chaine pile segment byte at: 07C0-07FF 'Ram' gpio segment byte at: 5000-5010 'Gpio' exti segment byte at: 50A0-50A7 'exti_cr' ; le segment contenant les vecteurs d'interruption vectit segment byte at: 8000-807F 'Flash' INT Start ; reset INT NonHandledInterrupt ; trap INT NonHandledInterrupt ; irq0 TLI External top level interrupt INT NonHandledInterrupt ; irq1 AWU Auto wake up from halt INT NonHandledInterrupt ; irq2 CLK Clock Controller INT NonHandledInterrupt ; irq3 EXTIO Port A external INT NonHandledInterrupt ; irq4 EXTI1 Port B INT NonHandledInterrupt ; irq5 EXTI2 Port C INT NonHandledInterrupt ; irq6 EXTI3 Port D INT NonHandledInterrupt ; irq7 EXTI4 Port E external INT NonHandledInterrupt ; irq8 reserved INT NonHandledInterrupt ; irq9 reserved INT NonHandledInterrupt ; irq10 SPI end of transfer INT NonHandledInterrupt ; irq11 TIM1 Update/overflow/underflow/trigger/break INT NonHandledInterrupt ; irq12 TIM1 Capture/Compare INT NonHandledInterrupt ; irq13 TIM2 update/overflow INT NonHandledInterrupt ; irq14 TIM2 capture / compare INT NonHandledInterrupt ; irq15 TIM3 Update/ overflow INT NonHandledInterrupt ; irq16 TIM3 Capture / Compare INT NonHandledInterrupt ; irq17 reserved INT NonHandledInterrupt ; irq18 reserved INT NonHandledInterrupt ; irq19 I2C INT NonHandledInterrupt ; irq20 Uart2 Tx Complete INT NonHandledInterrupt ; irq21 Uart2 Receive Register Data Full INT NonHandledInterrupt ; irq22 ADC1 end of conversion INT NonHandledInterrupt ; irq23 TIM4 Update/Overflow INT NonHandledInterrupt ; irq24 Flash EOP/WR_PG_DIS INT NonHandledInterrupt ; irq25 reserved INT NonHandledInterrupt ; irq26 reserved INT NonHandledInterrupt ; irq27 reserved INT NonHandledInterrupt ; irq28 reserved INT NonHandledInterrupt ; irq29 reserved ; le segment contenant le CODE doit avoir l'etiquette 'code' code segment byte at: 8080-80C0 'Flash' Start CLR cnt CLR icnt ; Initialisation des leds open drain LDW X,#PA_ODR ; On charge X avc l'adresse du port A, pas le contenu du premier registre du port A LD A,#MSK_LED CALL gpio_sortie ; initialisation des boutons LDW X,#PC_ODR LD A,#MSK_SWITCH CALL gpio_entree_int CALL inter_init toujours JRA toujours HALT INTERRUPT NonHandledInterrupt NonHandledInterrupt IRET ; Initialisation d'interruption externe sur le port C inter_init INC icnt ; EXTI_SetExtIntSensitivity( EXTI_PORT_GPIOC, EXTI_SENSITIVITY_FALL_ONLY); ; EXTI_SetTLISensitivity( EXTI_TLISENSITIVITY_FALL_ONLY); RET ; Initialisation d'un GPIO en entree X -> Port, A -> Masque des lignes ; Mode flottant avec interruption ; Px_DDR = Px_DDR & ^ Masque gpio_entree_int PUSH A CPL A AND A,($2,X) LD ($2,X),A ; Px_CR1 = Px_CR1 & ^ Masque LD A,($1,SP) CPL A AND A,($3,X) LD ($3,X),A ; Px_CR2 = Px_CR2 | Masque LD A,($1,SP) OR A,($4,X) LD ($4,X),A POP A INC icnt RET ; Initialisation d'un GPIO en sortie X -> Port, A -> Masque des lignes ; Px_DDR = Px_DDR | Masque gpio_sortie PUSH A OR A,($2,X) LD ($2,X),A ; Px_CR1 = Px_CR1 & ^ Masque LD A,($1,SP) CPL A AND A,($3,X) LD ($3,X),A ; Px_CR2 = Px_CR2 & ^ Masque LD A,($1,SP) CPL A AND A,($4,X) LD ($4,X),A POP A INC icnt RET