Øvelse+12+-+Linux+Applikation+som+benytter+serielt+interface

I denne øvelse skal vi lave en applikation som konfigurer en seriel port til 115200 8N1 (8bit,no parity,1 stopbit) og som kan kommunikere med et andet board vha RS-232. Vi skal benytte Posix interfacet.

Vi har lavet en struct og nogle defines vi bruger i vores kode. structen options er af typen termios, som gør det muligt beskrive terminalen med funktioner fra termios. code format="c" struct termios options; code Vores program er bygget op omkring en open funktion som skal initialisere seriel port 0. Denne bliver forkalret i brudstykker nedenunder. I dette kode afsnit åbnes filen og lægges i en fileDescriptor fd erklæres som en integer. Hvis fd er -1, er der sket en fejl. Dette vil give en error, som fortæller det er umuligt at åbne /dev/ttyS0(seriel port 0) code format="c" int fd; /* File descriptor for the port */
 * 1) define BAUDRATE B115200
 * 2) define MODEM "dev/ttyS0"

fd = open(MODEM, O_RDWR | O_NOCTTY | O_NDELAY); if (fd == -1) {          //Could not open the port. perror("open_port: Unable to open /dev/ttyS0 - "); }   else fcntl(fd, F_SETFL, 0); code I kodeafsnittet nedenunder benyttes tcgetattr, som benytter structen options. Funktionen fylder structen options med seriel port konfigurationen. code format="c" tcgetattr(fd,&options); code I dette kodeafsnit benyttes structen options igen til at sætte en baudrate for henholdsvis cfsetisspeed og cfsetiospeed. I code format="c" //Set the baud for in og output rates to 115200, vha DEFINE cfsetispeed(&options, BAUDRATE); cfsetospeed(&options, BAUDRATE); code I nedenstående kode sættes værdier for c_cflag: CS8 betyder at der bliver valgt 8 bit, no parity og et stop bit CLOCAL connection, ingen modem kontrol CREAD gør det muligt er modtage characters code format="c" options.c_cflag |= (CLOCAL | CREAD | CS8); code I kodeafsnittet sættes nye konfigurationer for porten ind i structen. TCSANOW gør at ændringer skal ske med det samme, unden af vente på output data til at sende færdig eller at modtage intput data. code format="c" tcsetattr(fd, TCSANOW, &options); code Her ses vores main, som kalder funktionen open, og lagre returværdien i fileD code format="c" int main {   int fileD = open_port; close(fileD); } code Når vores program er kopieret til vores Devkits(targets), eksekvereres output filen på target og seriel port 0 bliver initialiseret efter vores open funktion.

Nu er det muligt at komunikere via terminalen ved at benyttet disse 2 komandoer cat /dev/ttyS0 benyttes på den computer som vil læse fra sin seriel port 0 echo "Tekst" > /dev/tyyS0 skriver fra sin seriel porten 0 code format="c" cat /dev/ttyS0 echo "Tekst" > /dev/ttyS0 code