Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: mbed-rtos mbed CRC16
Fork of S5info_APP2 by
Revision 12:a55f77a0e188, committed 2017-03-07
- Comitter:
- JoeyDionne
- Date:
- Tue Mar 07 02:12:21 2017 +0000
- Parent:
- 11:b27d1a83f688
- Child:
- 13:a436ba0b78e8
- Commit message:
- add ?criture
Changed in this revision
| main.cpp | Show annotated file Show diff for this revision Revisions of this file |
--- a/main.cpp Tue Mar 07 00:54:26 2017 +0000
+++ b/main.cpp Tue Mar 07 02:12:21 2017 +0000
@@ -9,6 +9,11 @@
Serial uart(p13, p14, 9600);
Thread ThreadLecture;
+bool transmit = false; //faux pour le debut de demi-periode d'envoie d'un bit, vrai pour la 2ème demi-periode
+char trame_sent[80]; //tableau de la trame à envoyer
+uint8_t byte_sent_pos, //position de l'octet dans le tableau d'envoi
+ bit_sent, //position du bit de l'octet en cours d'envoi (du MSB au LSB) 7..0
+ trame_length; //longueur de la trame complete
//test
bool bIsHalfPeriod = false;
@@ -62,14 +67,81 @@
NVIC_EnableIRQ(RIT_IRQn);
};
+void send_data()
+{
+ if (!transmit) { //Si on est dans la premiere demi-periode d'envoie
+ if (((trame_sent[byte_sent_pos] >> bit_sent) & 0x01) == 1) { //Verifier le bit à envoyer et preparer la prochaine interruption pour prendre sa valeur
+ LPC_RIT->EMR |= 1 << 5;
+ LPC_RIT->EMR &= ~(1 << 4);
+ } else {
+ LPC_RIT->EMR |= 1 << 4;
+ LPC_RIT->EMR &= ~(1 << 5);
+ }
+ } else { //Si on est dans la 2eme demi-periode d'envoie, toggle a la prochaine interruption
+ LPC_RIT->EMR |= 3 << 4;
+ bit_sent--;
+ }
+ transmit = !transmit; //varier entre la 1ere et 2eme partie de demi-periode
+ LPC_RIT->MR0 += HALF_PERIOD; //preparer la prochaine interruption a une demi-periode plus loin
+ if (bit_sent < 0) { //Si l'octet a ete envoye
+ bit_sent = 7; //remettre la position initiale pour le prochain octet
+ byte_sent_pos++; //incrementer l'octet
+ if (byte_sent_pos > trame_length) { //Si la trame a ete envoyee
+ LPC_RIT->MCR &= 0; //desactiver les interruptions du MAT
+ LPC_RIT->EMR &= ~(3 << 4); //remettre a zero le registre EMR (00 pour rien faire, 01 pour mettre a 1, 10 pour mettre a 0 et 11 pour toggle)
+ byte_sent_pos = 0;
+ transmit = false;
+ }
+ }
+}
+
+void get_text()
+{
+ CRC16 *myCRC = new CRC16();
+
+ trame_sent[0] = 0x55; //Preambule
+ trame_sent[1] = 0x7E; //Start
+ trame_sent[2] = 0x00; //Type + Flag mis a 0x00
+
+ pc.printf("\n\rYour text : ");
+ int count = 0;
+ char c = 0x00;
+ char text[73];
+ while(c != 0x0D && count < 73) { //Tant que c'est different de '\r' et un maximum de 33 caractères
+ c = pc.getc();
+ trame_sent[count + 4] = c; //Ajouter les caractères tapés au clavier dans le message
+ text[count] = c;
+ pc.putc(c);
+ count++;
+ }
+ trame_sent[3] = (char)count; //Longueur du message (Max 33 caractères)
+
+ unsigned short resultCRC = myCRC->calculateCRC16(text,count);
+ trame_sent[count + 4] = (resultCRC >> 8) & 0xFF;
+ trame_sent[count + 5] = resultCRC & 0xFF;
+
+ trame_sent[count + 6] = 0x7E; //End
+ trame_length = count + 6; //Longueur de la trame
+
+}
+
+void write()
+{
+ byte_sent_pos = 0;
+ bit_sent = 7;
+ LPC_RIT->MCR = 1; //Permettre les interruption du MAT
+ LPC_RIT->MR0 = LPC_RIT->TC + HALF_PERIOD; //Faire une interruption a la prochaine demi-periode
+}
+
int main() {
rit_init();
ThreadLecture.start(read);
while(true) {
- // TODO: Mettre ici le code pour l'input et l'envoie de message
- uart.printf("12345");
+ get_text();
+ write();
+ //uart.printf("12345");
wait_ms(100);
}
};
\ No newline at end of file
