Page begin -
Logo DISCO
|
Go to the Highly accessible area
|
Go to the Content page
|
Go to the End of content
|
Go to the Main menu
|
Go to the Navigation Bar (location)
|
Go to the Navigation menu (tree)
|
Go to the Commands list
|
Go to the Further readings
|
Go to the Bottom Menu
|
Logo Ateneo
   
Education
Tecnologie Hardware per sistemi dedicati

Crediti: 4

Docente: Mario Malcangi

Conoscenze: Tecnologie di base: microcontrollori, digital signal processors, architetture programmabili, peroferiche e memorie. Sistemi di sviluppo e tecniche di programmazione per microcontrollori.

Abilità: utilizzo di un sistema di sviluppo per microcontrollori e sviluppo di semplici programmi in Assembler e C.


Programma:

a.       Lezioni frontali (24 ore)

  • Microcontrollori : Architettura e Modello di programmazione (Assembler)
  • Digital Signal Processor: Architettura e Modello di programmazione (Assembler)
  • Architetture programmabili: FPGA e Processori riconfigurabili
  • Periferiche: Digitali (porte seriali e I/O parallelo, timer, PLL, PWM) e Analogiche (A/D, D/A)
  • Tenologie di memoria: RAM e Flash
  • Ambiente di sviluppo: Emulazione e Simulazione
  • Programmazione per microcontrollori: ANSI C, Compilatori ottimizzanti, System C
  • Applicazioni: Controllo digitale e Acquisizione dati e controllo

b.   Esercitazioni (12 ore): utilizzo di un microcontrollore embedded e del relativo ambiente di sviluppo .

 

Dispensa del corso:

M. Malcangi, Tecnologie hardware per i sistemi dedicati, Edizione Maggioli, 2008.

Altro materiale didattico:

Davies, John H., MSP430 Microcontroller Basics, Elsevier, 2008.

Modalità d'esame:

L’esame consta di una  test scritto (domande a carattere toerico e pratico) e discussione orale.
La prova potrà essere sostituita dallo sviluppo di un progetto, anche in collaborazione con l’insegnamento di Tecnologie software per sistemi dedicati.

Durante il corso è stato utilizzato il microcontrollore MSP430 come piattaforma di studio delle problematiche di progettazione hardware.
Quello che segue è un esempio di programmazione per un'applicazione dedicata di misura e controllo della temperatura.

Si faccia riferimento ai seguenti documenti tecnici (data sheet e manuali):

Texas Instruments, http://focus.ti.com/lit/ug/slau144e/slau144e.pdf

Texas Instruments, MSP430 Assembly Language Tools User’s Guide, Literature Number: SLAU131, October 2004



;*******************************************************************************
;   MSP430F2013 - Acquisizione dati e controllo
;
;   Specifiche applicative:
;  
;   Il sensore viene campionato ogni 240 ms;
;   La misura della tensione viene registrata in memoria
;   con modalità circolare (buffer circolare);
;   Se la misura aumenta di un delta, viene acceso il LED (P1.0)
;  
;
;
;         MSP430F2013
;             -------------------
;         /|\|                  XIN|-
;          | |                       |
;          --|RST          XOUT|-
;            |                       |
;            |A6+ --|             |
;            |      Tsens         |
;            |A6- --|        P1.0|-->LED
;            |                       |
;             -------------------
;
;*******************************************************************************

ADCDeltaOn  EQU      1      ; Delta di temperatura in crescita
CBuffStart  EQU      0200h  ; Indirizzo base del buffer circolare



;   CPU Registers Used

#define   LastADCVal  R4

                            ; R4 tiene conto dell'ultima misura di temperatura
                            ; eseguita dal ADC-SD16

#define   CbuffHead   R5    ; R5 usato come puntatore di testa del
                                        ; buffer circolare

#include  "msp430x20x3.h"   ; Contiene tutte le definizioni del MSP4302013
                                          ; Vedi data sheet del MSP4302013 (SLAS491D)

;-------------------------------------------------------------------------------
            ORG     0F800h                  ; Indirizzo ISR Reset
;-------------------------------------------------------------------------------

RESET       mov.w   #0280h,SP               ; Inizializza lo stackpointer

SetupCLK    bis.b   #DIVS_3,&BCSCTL2        ; Programma il clock: SMCLK/8
           
SetupWDT    mov.w   #WDT_MDLY_32,&WDTCTL    ; Il WDT viene utilizzato come timer semplice
            bis.b   #WDTIE,&IE1             ; e lo si abilita in interruzione
           
SetupP1     bis.b   #001h,&P1DIR            ; Bit 0 della porta P1.0 abilitato in output
                                            ; Questo bit è collegato fisicamente al LED

SetupSD16   mov.w   #SD16REFON+SD16SSEL_1,&SD16CTL  ; ADC16 utilizza 1.2V ref interno e SMCLK
            mov.b   #SD16INCH_6,&SD16INCTL0         ; Connette il sensore di temperatura
                                                    ; all'ingresso dell'ADC16 (A6+,A6-)                                       
            mov.w   #SD16SNGL+SD16IE,&SD16CCTL0     ; Modalità conversione semplice e interruzione

SetupCbuff  mov.w   #CBuffStart,R5          ; Usa R5 come puntatore al buffer circolare                                                        ;               

Mainloop    bis.w   #CPUOFF+GIE,SR          ; CPU off (sleep), abilita le interruzioni
            nop                             ; Questa NOP serve solo per la fase di debug
                                            ;
;-------------------------------------------------------------------------------
SD16_ISR    ; Routine di servizio interruzione da ADC16
;-------------------------------------------------------------------------------
            add.w   #ADCDeltaOn,LastADCVal  ; Somma il delta alla misura di temperatura precedente
            bic.b   #01h,&P1OUT             ; Spegne il LED
            cmp.w   LastADCVal,&SD16MEM0    ; Confronta la temperatura precedente incrementata del delta
                                            ; con la temperatura attuale;
                                            ; nota: la lettura del dato ADC azzera la rihiesta
                                            ; di interruzione fatta dall'ADC
                                            ;
            jlo     SD16_ISR_1              ;
            bis.b   #01h,&P1OUT             ; Accende il LED se c'è stato un aumento di temperatura
SD16_ISR_1  mov.w   &SD16MEM0,LastADCVal    ; Salva la misura di temperatura attuale come precedente
            mov.w   R4,0(R5)                ; Salva la misura nel buffer circolare
            incd.w  R5                      ; Incrementa il puntatore
            bic.w   #0fdc0h,R5              ; Esegue il controllo wrap-around (0200h-023fh)
            reti                            ;       
                                            ;
;-------------------------------------------------------------------------------
WDT_ISR    ; Routine di servizione del WDC usato come temporizzatore del ADC-SD16
;-------------------------------------------------------------------------------
            bis.w   #SD16SC,&SD16CCTL0      ; Start di conversione per ADC-SD16
            reti                            ;       
                                            ;
;-------------------------------------------------------------------------------
;           Vettori di interruzione
;-------------------------------------------------------------------------------
            ORG     0FFFEh                  ; RESET
            DW      RESET                   ;
            ORG     0FFF4h                  ; WDT
            DW      WDT_ISR                 ;
            ORG     0FFEAh                  ; ADC-SD16
            DW      SD16_ISR                ;
            END

Further readings
(C) Copyright 2016 - Dipartimento Informatica Sistemistica e Comunicazione - Viale Sarca, 336
20126 Milano - Edificio U14
redazioneweb@disco.unimib.it - last update of this page 25/03/2011