Hardwaresimulation auf dem PC
Embed:
(wiki syntax)
Show/hide line numbers
VH.cpp
00001 #include "VH.h" 00002 00003 char VH::gibZeichen(void) 00004 { 00005 char c; 00006 while (serial_port->readable()==false); 00007 serial_port->read(&c, 1); 00008 return c; 00009 } 00010 00011 void VH::setZeichen(char c) 00012 { 00013 while (serial_port->writable()==false); 00014 serial_port->write(&c, 1); 00015 } 00016 void VH::eingabe(void) 00017 { int i=0, pudr; 00018 while(1) 00019 { 00020 i=0; 00021 if (serial_port->readable()) { // Chars received? 00022 serial_port->read(buffer+i, 1); 00023 switch (buffer[0]) 00024 { 00025 case 14: 00026 i++; 00027 buffer[i]=gibZeichen(); 00028 i++; 00029 buffer[i]=gibZeichen(); 00030 break; 00031 //9, 1, 2, 3 Input in PUDR 00032 case 9: //Setze Port P0 => PortA Low 00033 i++; 00034 buffer[i]=gibZeichen(); 00035 pudr=0; 00036 for (int j=0;j<8;j++) 00037 { 00038 pudr=pudr<<2; 00039 if ((buffer[i]&(1<<(7-j)))!=0) pudr|=0b01; else pudr|=0b10; 00040 } 00041 pudr&=~0b11110011; 00042 GPIOA->PUPDR=(GPIOA->PUPDR&0xFFFF00F3)|pudr; 00043 break; 00044 case 1: //Setze Port P1 => PortC Low 00045 i++; 00046 buffer[i]=gibZeichen(); 00047 pudr=0; 00048 for (int j=0;j<8;j++) 00049 { 00050 pudr=pudr<<2; 00051 if ((buffer[i]&(1<<(7-j)))!=0) pudr|=0b01; else pudr|=0b10; 00052 } 00053 GPIOC->PUPDR=(GPIOC->PUPDR&0xFFFF0000)|pudr; 00054 break; 00055 case 2: //Setze Port P2 => PortB Low 00056 i++; 00057 buffer[i]=gibZeichen(); 00058 pudr=0; 00059 for (int j=0;j<8;j++) 00060 { 00061 pudr=pudr<<2; 00062 if ((buffer[i]&(1<<(7-j)))!=0) pudr|=0b01; else pudr|=0b10; 00063 } 00064 GPIOB->PUPDR=(GPIOB->PUPDR&0xFFFF0000)|pudr; 00065 break; 00066 case 3: //Setze Port P3 => PortA High 00067 i++; 00068 buffer[i]=gibZeichen(); 00069 pudr=0; 00070 for (int j=0;j<8;j++) 00071 { 00072 pudr=pudr<<2; 00073 if ((buffer[i]&(1<<(7-j)))!=0) pudr|=0b01; else pudr|=0b10; 00074 } 00075 pudr&=~0b0000111100000000; 00076 GPIOA->PUPDR=(GPIOA->PUPDR&0x0F00FFFF)|pudr<<16; 00077 break; 00078 case 8: //lese P0 00079 break; 00080 case 5: //lese P1 (PortC) 00081 break; 00082 case 6: //lese P2 00083 break; 00084 case 7: //lese P3 00085 break; 00086 } 00087 00088 ausgabe(buffer[0]); 00089 } 00090 } 00091 } 00092 void VH::ausgabe(char nr) 00093 { 00094 00095 a=buffer[0]; 00096 b=buffer[1]; 00097 c=buffer[2]; 00098 switch(nr) 00099 { 00100 case 14: 00101 00102 outbuffer[0]=14; 00103 outbuffer[1]=1; 00104 outbuffer[3]=0; 00105 for (int i=0; i<3;i++) setZeichen(outbuffer[i]); 00106 break; 00107 case 9: //Setze Port P0 => PortA Low 00108 case 1: //Setze Port P1 => PortC Low 00109 case 2: //Setze Port P2 => PortB Low 00110 case 3: //Setze Port P3 => PortA High 00111 for (int i=0; i<2;i++) setZeichen(buffer[i]); 00112 break; 00113 case 8: //lese P0 = PortA Low 00114 outbuffer[0]=buffer[0]; 00115 outbuffer[1]=GPIOA->IDR&0xFF; 00116 for (int i=0; i<2;i++) setZeichen(outbuffer[i]); 00117 break; 00118 case 5: //lese P1 = PortC Low 00119 outbuffer[0]=buffer[0]; 00120 outbuffer[1]=GPIOC->ODR&0xFF; 00121 for (int i=0; i<2;i++) setZeichen(outbuffer[i]); 00122 break; 00123 case 6: //lese P2 = PortB Low 00124 outbuffer[0]=buffer[0]; 00125 outbuffer[1]=GPIOB->IDR&0xFF; 00126 for (int i=0; i<2;i++) setZeichen(outbuffer[i]); 00127 break; 00128 case 7: //lese P3 = PortA High 00129 outbuffer[0]=buffer[0]; 00130 outbuffer[1]=(GPIOA->IDR>>8)&0xFF; 00131 for (int i=0; i<2;i++) setZeichen(outbuffer[i]); 00132 break; 00133 00134 } 00135 } 00136 VH::VH(void) 00137 { 00138 serial_port=new BufferedSerial(USBTX, USBRX); 00139 warteAufEingabe=new Thread(); 00140 warteAufEingabe->start(callback(this,&VH::eingabe)); 00141 }
Generated on Sat Jul 23 2022 13:29:45 by
1.7.2