Nessun titolo diapositiva

Download Report

Transcript Nessun titolo diapositiva

Corso di Sistemi in Tempo Reale
Laurea in Ingegneria dell‘Automazione a.a. 2008-2009
The dsPic33 and FLEX board
Paolo Pagano
RETIS Laboratory,
Scuola Superiore Sant'Anna, Pisa, Italy
[email protected]
retis.sssup.it
Course Outline (1/2)
• Second day (24th)
• FSM implementation in C (slides by prof. Di Natale)
• A case study
• Real Hardware demonstration
retis.sssup.it
Outline
• Introduction to the FLEX board
• A FSM instantiation on the FLEX
• Visit the web site:
http://feanor.sssup.it/~pagano/personalWEB/courses.htm
retis.sssup.it
FLEX
embedded boards
idea:
cheap, small, easy-to-use evaluation boards
Typical applications:
• industrial sensing and control
• small robots
• wireless sensor networks
• demo boards for university labs
retis.sssup.it
Flex
retis.sssup.it
board layout
retis.sssup.it
add-on boards
breadboard
1 - 2.54mm pattern
2 - 2.54mm alternate
pattern
(RJ45 / RS232
connectors)
3 - 1.27mm pattern
(SMD components)
4 - 5.08mm pattern
(clamps)
retis.sssup.it
add-on boards
multibus
1 - Serial port 2
(RS232 / RS422 /
RS485 / TP-UART)
2 - Serial port 1
(RS232 / RS422 /
RS485)
3 - CAN port 1
4 - CAN port 2
5 - I2C port
6 - SPI port
7 - 10Mbit
Ethernet
8 - RJ45 Ethernet
retis.sssup.it
Our test device
• It is an extended basic flex board;
• We connected the dsPic33 core to:
• Set of buttons (input);
• Set of leds (output);
• LCD display (status display).
• We have in mind to simulate an elevator controller:
• its implementation starts from FSM modeling;
• the model is validated by OTS tools (Uppaal);
• the code generation is done by hand.
retis.sssup.it
How to program our device
• Our FLEX board should run
a specific program
(firmware);
• We need a compiler to
translate from C to
machine code;
• We need a linker command
file that allows the test
code to be targeted to the
dsPIC33;
• We need a tool to transfer
the firmware from the PC to
the MCU flash memory.
MPLAB_C30
gld script
Microchip ICD2
retis.sssup.it
COFF file structure
http://delorie.com/djgpp/doc/coff/
retis.sssup.it
Peripheral Mapping
• Expansion Board PIN I/O:
• Leds -> PortD (output)
• But’s -> PortG (input)
• LCD -> PortA (output)
retis.sssup.it
MCU I/O
• A port is a set of analog/digital enabled pins.
• A port can be configured to catch analog or digital
inputs. Digital signals can have a duration (like those
generated by pushing buttons) or can be “levels” (latch
mode).
• of course finite signals must be caught while high.
retis.sssup.it
How to configure ports
•
dsPic has 7 ports defined in the
included header:
•
•
Configuring a port for OUTPUT
#include "p33FJ256MC710.h"
void initLeds (void)
{
•
Configuring a port for INPUT:
TRISDbits.TRISD0 = 0;
TRISDbits.TRISD1 = 0;
TRISDbits.TRISD2 = 0;
TRISDbits.TRISD3 = 0;
TRISDbits.TRISD4 = 0;
TRISDbits.TRISD5 = 0;
TRISDbits.TRISD6 = 0;
TRISDbits.TRISD7 = 0;
TRISDbits.TRISD8 = 0;
TRISDbits.TRISD9 = 0;
TRISDbits.TRISD10 = 0;
TRISDbits.TRISD11 = 0;
TRISDbits.TRISD12 = 0;
TRISDbits.TRISD13 = 0;
TRISDbits.TRISD14 = 0;
TRISDbits.TRISD15 = 0;
void initButtons (void)
{
TRISGbits.TRISG6 = 1;
TRISGbits.TRISG7 = 1;
TRISGbits.TRISG8 = 1;
}:
TRISGbits.TRISG9 = 1;
16 pels of the
LCD
4 Buttons }
retis.sssup.it
How to read/write ports
•
Reading INPUT:
•
int getButton ( int j ){
switch (j){
case 0:
return !PORTGbits.RG6;
case 1:
return !PORTGbits.RG7;
case 2:
return !PORTGbits.RG8;
case 3:
return !PORTGbits.RG9;
}
}
Writing OUTPUT:
void setLed ( int led, int on_off ){
switch (led){
case 0:
LATDbits.LATD0 = on_off;
break;
case 1:
LATDbits.LATD1 = on_off;
break;
case 2:
LATDbits.LATD2 = on_off;
break;
case 3:
LATDbits.LATD3 = on_off;
break;
}
}
retis.sssup.it
the end
Questions ?
retis.sssup.it
HOWTO initialize and transit
static enum State {
IDLE, S0, S1, S2, S3
};
static enum Signal {
ABSENT, GO_TO_S0, GO_TO_S1,
GO_TO_S2, GO_TO_S3
};
init
void FSMInit(FSM *me){
me->state_ = IDLE;
}
void FSMTran_(FSM *me, unsigned int
dest)
{
me->state_ = dest;
}
enum Signal FSMGetSignals(FSM *me){
if (b0)
return GO_TO_S0;
else if (b1)
return GO_TO_S1;
else if (b2)
return GO_TO_S2;
else if (b3)
return GO_TO_S3;
return ABSENT;
}
signal
generation
transition
retis.sssup.it