Created
February 19, 2020 22:35
-
-
Save xvzf/95c6e06415d7441161d5fae634df8e71 to your computer and use it in GitHub Desktop.
MPT Sh$t
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/********************************************************************/ | |
/* Hochschule fuer Technik und Wirtschaft */ | |
/* Fakultät fuer Ingenieurwissenschaften */ | |
/* Labor fuer Eingebettete Systeme */ | |
/* Mikroprozessortechnik */ | |
/********************************************************************/ | |
/* */ | |
/* C_Übung.C: */ | |
/* Programmrumpf fuer C-Programme mit dem Keil */ | |
/* Entwicklungsprogramm uVision fuer ARM-Mikrocontroller */ | |
/* */ | |
/********************************************************************/ | |
/* Aufgaben-Nr.: * */ | |
/* * */ | |
/********************************************************************/ | |
/* Gruppen-Nr.: * */ | |
/* * */ | |
/********************************************************************/ | |
/* Name / Matrikel-Nr.: * Matthias Riegler */ | |
/* * */ | |
/* * */ | |
/********************************************************************/ | |
/* Abgabedatum: * */ | |
/* * */ | |
/********************************************************************/ | |
#include <LPC21xx.H> /* LPC21xx Definitionen */ | |
#define PCLOCK 12500000 | |
#define BAUD 19200 | |
#define FREQUENCY_DIVIDER (int)(PCLOCK/(BAUD*16)) | |
#define UART0_PINSEL 0x05 | |
#define UART_FIFO_TRANSMIT_MASK 0x20 | |
#define UART_FIFO_RECEIVE_MASK 0x01 | |
#define UART_FIFO 0x07 // 0b111 | |
#define LCR_8BIT_1STOP_DLAB 0x83 | |
#define DLAB_RESET 0x03 | |
#define BYTE_HEXDUMP_COUNT 8 | |
#define BYTE_4BIT_LSB 0x0F | |
#define BYTE_4BIT_MSB 0xF0 | |
#define BYTE_4BIT_SHIFT 4 | |
#define CR 0x0D | |
#define LF 0x0A | |
void transmitChar(char c); | |
char decToHex(unsigned char i); | |
unsigned char hexToDec(char c); | |
void* readAddr(void); | |
void hexDump(void* addr); | |
int main(void) { | |
int i = 0; | |
PINSEL0 |= UART0_PINSEL; | |
U0LCR = LCR_8BIT_1STOP_DLAB; | |
// Set Baudrate (LSB and MSB) | |
U0DLL = FREQUENCY_DIVIDER % 256; | |
U0DLM = FREQUENCY_DIVIDER / 256; | |
// RESET DLAB Bit in order to enable access to other control registers | |
U0LCR = DLAB_RESET; | |
// Enable receive&transmit FIFO buffer | |
U0FCR = UART_FIFO; | |
// Print validate connection string | |
for(;i < 10; i++) { | |
transmitChar(decToHex(i)); | |
} | |
for(;;) { | |
hexDump(readAddr()); | |
} | |
} | |
void transmitChar(char c) { | |
// send register ready? | |
while((U0LSR & UART_FIFO_TRANSMIT_MASK) == 0); | |
U0THR = c; | |
} | |
char readChar() { | |
// receive register ready? | |
while((U0LSR & UART_FIFO_RECEIVE_MASK) == 0); | |
return U0THR; | |
} | |
char decToHex(unsigned char i) { | |
// Single digit | |
if (i < 10) { | |
return '0' + i; | |
} | |
// A-F | |
return 'A' + (i-10); | |
} | |
unsigned char hexToDec(char c) { | |
// Single digit | |
if (c < 'A') { | |
return c - '0'; | |
} | |
// A-F | |
return c - 'A'; | |
} | |
void* readAddr(void) { | |
int i = 0; | |
char currChar = ' '; | |
unsigned long addr = 0; | |
transmitChar(CR); | |
transmitChar(LF); | |
for(; i < 8; i++) { | |
currChar = readChar(); | |
if (currChar == CR) break; | |
// Update address | |
addr = hexToDec(currChar) | addr << 4; | |
// Echo input | |
transmitChar(currChar); | |
} | |
return (void*) addr; | |
} | |
void hexDump(void* addr) { | |
int i = 0; | |
// cast address to an unsigned char at that position | |
unsigned char *pc = (unsigned char*) addr; | |
// temp value | |
unsigned char toDump = 0x00; | |
transmitChar(':'); | |
for(;i < 8; i++) { | |
transmitChar(' '); | |
toDump = *(pc + i); | |
// hexdump of one byte | |
transmitChar(decToHex((toDump & BYTE_4BIT_MSB) >> BYTE_4BIT_SHIFT)); | |
transmitChar(decToHex(toDump & BYTE_4BIT_LSB)); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment