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
main.cpp
- Committer:
- jjantoine
- Date:
- 2018-12-21
- Revision:
- 5:851e7afdc4fe
- Parent:
- 4:a5b5809ee14f
File content as of revision 5:851e7afdc4fe:
#include "mbed.h"
#include "TYPE_Def.h"
#include "CRC32BIT_LOOKUP_Ext.h"
Serial pc(USBTX, USBRX); // tx, rx
UINT32_T crc;
ERROR_T ERROR_Value;
CRC32BIT_LOOKUP_TS _Crc32Table_TGP_DUT;
BYTE_T vettore[11];
char crcchar[4];
unsigned int j;
//char crc[4] = {0xBD ,0x5A , 0x97 , 0xDD};
char packetsize[4] = {0x00 ,0x00 , 0x00 , 0x0F};
DigitalIn mybutton(USER_BUTTON);
DigitalOut myled(LED2);
DigitalOut Porta0_7 (PA_0);
DigitalOut Porta0_6 (PA_1);
DigitalOut Porta0_5 (PA_4);
DigitalOut Porta0_4 (PA_6);
DigitalOut Porta0_3 (PA_7);
DigitalOut Porta0_2 (PA_8);
DigitalOut Porta0_1 (PA_9);
DigitalOut Porta0_0 (PA_12);
DigitalOut Porta1_7 (PB_0);
DigitalOut Porta1_6 (PB_1);
DigitalOut Porta1_5 (PB_3);
DigitalOut Porta1_4 (PB_4);
DigitalOut Porta1_3 (PB_5);
DigitalOut Porta1_2 (PB_6);
DigitalOut Porta1_1 (PB_7);
DigitalOut Porta1_0 (PB_10);
DigitalOut Porta2_7 (PC_0);
DigitalOut Porta2_6 (PC_1);
DigitalOut Porta2_5 (PC_2);
DigitalOut Porta2_4 (PC_3);
DigitalOut Porta2_3 (PC_5);
DigitalOut Porta2_2 (PC_6);
DigitalOut Porta2_1 (PC_7);
DigitalOut Porta2_0 (PC_8);
DigitalOut Porta3_7 (PA_13);
DigitalOut Porta3_6 (PA_14);
DigitalOut Porta3_5 (PA_15);
DigitalOut Porta3_4 (PC_14);
DigitalOut Porta3_3 (PC_15);
DigitalOut Porta3_2 (PA_11);
DigitalOut Porta3_1 (PB_12);
DigitalOut Porta3_0 (PC_4);
void crc_cal();
void TGP_SET_GPO_CMD();
void TGP_SET_GPO_ACK(char*, char*, char*, char*, char*);
void GPIO_SET(char*,char*,char*,char*,char*,char*,char*,char*);
int* charbit(char*,char*);
int main()
{
pc.baud(9600);
while(1)
{
pc.attach(&TGP_SET_GPO_CMD,Serial::RxIrq);
}
}
void TGP_SET_GPO_CMD()
{
unsigned int i;
char UINT32_PacketSize [4];
char ENUM_Packet_ID;
char UINT16_PacketCounter [2];
char UINT32_Timestamp [4];
char UINT32_Port0Value [4];
char UINT32_Port0Mask [4];
char UINT32_Port1Value [4];
char UINT32_Port1Mask [4];
char UINT32_Port2Value [4];
char UINT32_Port2Mask [4];
char UINT32_Port3Value [4];
char UINT32_Port3Mask [4];
char UINT32_CRC [4];
myled = 0;
for(i=0; i<4; i++){
UINT32_PacketSize[i] = pc.getc();
}
ENUM_Packet_ID=pc.getc();
for(i=0; i<2; i++){
UINT16_PacketCounter[i]=pc.getc();
}
for(i=0; i<4; i++){
UINT32_Timestamp[i]=pc.getc();
}
for(i=0; i<4; i++){
UINT32_Port0Value[i]=pc.getc();
}
for(i=0; i<4; i++){
UINT32_Port0Mask[i]=pc.getc();
}
for(i=0; i<4; i++){
UINT32_Port1Value[i]=pc.getc();
}
for(i=0; i<4; i++){
UINT32_Port1Mask[i]=pc.getc();
}
for(i=0; i<4; i++){
UINT32_Port2Value[i]=pc.getc();
}
for(i=0; i<4; i++){
UINT32_Port2Mask[i]=pc.getc();
}
for(i=0; i<4; i++){
UINT32_Port3Value[i]=pc.getc();
}
for(i=0; i<4; i++){
UINT32_Port3Mask[i]=pc.getc();
}
for(i=0; i<4; i++){
UINT32_CRC[i]=pc.getc();
}
myled = 1;
TGP_SET_GPO_ACK(UINT32_PacketSize,&ENUM_Packet_ID,UINT16_PacketCounter,UINT32_Timestamp,UINT32_CRC);
GPIO_SET(UINT32_Port0Value,UINT32_Port0Mask,UINT32_Port1Value,UINT32_Port1Mask,UINT32_Port2Value,UINT32_Port2Mask,UINT32_Port3Value,UINT32_Port3Mask);
}
void TGP_SET_GPO_ACK(char*A, char*B, char*C, char*D, char*E)
{
char UINT32_PacketSize [4];
char ENUM_Packet_ID;
char UINT16_PacketCounter [2];
char UINT32_Timestamp [4];
char UINT32_CRC [4];
unsigned int i;
for(i=0;i<4;i++)
{
UINT32_PacketSize[i] = A[i];
}
ENUM_Packet_ID = *B;
for(i=0;i<2;i++)
{
UINT16_PacketCounter[i] = C[i];
}
for(i=0;i<4;i++)
{
UINT32_Timestamp[i] = D[i];
}
for(i=0;i<4;i++)
{
UINT32_CRC[i] = E[i];
}
//def vettore
j=0;
for(i=0; i<4; i++){
vettore[j] = packetsize[i];
j++;
}
vettore[j] = ENUM_Packet_ID+1;
j++;
for(i=0; i<2; i++){
vettore[j] = UINT16_PacketCounter[i];
j++;
}
for(i=0; i<4; i++){
vettore[j] = UINT32_Timestamp[i];
j++;
}
/*
for(i=0; i<4; i++){
pc.printf("%c",UINT32_PacketSize[i]);
}
*/
for(i=0; i<4; i++){
pc.printf("%c",packetsize[i]);
}
pc.printf("%c",ENUM_Packet_ID+1);
for(i=0; i<2; i++){
pc.printf("%c",UINT16_PacketCounter[i]);
}
for(i=0; i<4; i++){
pc.printf("%c",UINT32_Timestamp[i]);
}
/*
for(i=0; i<4; i++){
pc.printf("%c",UINT32_CRC[i]);
}
*/
crc_cal();
for(i=0; i<4; i++){
pc.printf("%c",crcchar[i]);
}
myled = 0;
}
void GPIO_SET(char*A,char*B,char*C,char*D,char*E,char*F,char*G,char*H)
{
unsigned int i,btts;
btts=0;
char UINT32_Port0Value [4];
char UINT32_Port0Mask [4];
char UINT32_Port1Value [4];
char UINT32_Port1Mask [4];
char UINT32_Port2Value [4];
char UINT32_Port2Mask [4];
char UINT32_Port3Value [4];
char UINT32_Port3Mask [4];
int* porta0;
int* porta1;
int* porta2;
int* porta3;
int bit0[32];
int bit1[32];
int bit2[32];
int bit3[32];
for(i=0;i<4;i++)
{
UINT32_Port0Value[i] = A[i];
}
for(i=0;i<4;i++)
{
UINT32_Port0Mask[i] = B[i];
}
for(i=0;i<4;i++)
{
UINT32_Port1Value[i] = C[i];
}
for(i=0;i<4;i++)
{
UINT32_Port1Mask[i] = D[i];
}
for(i=0;i<4;i++)
{
UINT32_Port2Value[i] = E[i];
}
for(i=0;i<4;i++)
{
UINT32_Port2Mask[i] = F[i];
}
for(i=0;i<4;i++)
{
UINT32_Port3Value[i] = G[i];
}
for(i=0;i<4;i++)
{
UINT32_Port3Mask[i] = H[i];
}
porta0 = charbit(UINT32_Port0Value,UINT32_Port0Mask);
for(i=0;i<32;i++)
{
bit0[i]=porta0[i];
}
porta1 = charbit(UINT32_Port1Value,UINT32_Port1Mask);
for(i=0;i<32;i++)
{
bit1[i]=porta1[i];
}
porta2 = charbit(UINT32_Port2Value,UINT32_Port2Mask);
for(i=0;i<32;i++)
{
bit2[i]=porta2[i];
}
porta3 = charbit(UINT32_Port3Value,UINT32_Port3Mask);
for(i=0;i<32;i++)
{
bit3[i]=porta3[i];
}
//while(1)
//{
//if(mybutton == 0 & btts ==0)
//{
Porta0_7 = bit0[0];
Porta0_6 = bit0[1];
Porta0_5 = bit0[2];
Porta0_4 = bit0[3];
Porta0_3 = bit0[4];
Porta0_2 = bit0[5];
Porta0_1 = bit0[6];
Porta0_0 = bit0[7];
Porta1_7 = bit1[0];
Porta1_6 = bit1[1];
Porta1_5 = bit1[2];
Porta1_4 = bit1[3];
Porta1_3 = bit1[4];
Porta1_2 = bit1[5];
Porta1_1 = bit1[6];
Porta1_0 = bit1[7];
Porta2_7 = bit2[0];
Porta2_6 = bit2[1];
Porta2_5 = bit2[2];
Porta2_4 = bit2[3];
Porta2_3 = bit2[4];
Porta2_2 = bit2[5];
Porta2_1 = bit2[6];
Porta2_0 = bit2[7];
Porta3_7 = bit3[0];
Porta3_6 = bit3[1];
Porta3_5 = bit3[2];
Porta3_4 = bit3[3];
Porta3_3 = bit3[4];
Porta3_2 = bit3[5];
Porta3_1 = bit3[6];
Porta3_0 = bit3[7];
// wait(1);
// btts = 1;
//} else if (mybutton == 0 & btts == 1) {
Porta0_7 = bit0[8];
Porta0_6 = bit0[9];
Porta0_5 = bit0[10];
Porta0_4 = bit0[11];
Porta0_3 = bit0[12];
Porta0_2 = bit0[13];
Porta0_1 = bit0[14];
Porta0_0 = bit0[15];
Porta1_7 = bit1[8];
Porta1_6 = bit1[9];
Porta1_5 = bit1[10];
Porta1_4 = bit1[11];
Porta1_3 = bit1[12];
Porta1_2 = bit1[13];
Porta1_1 = bit1[14];
Porta1_0 = bit1[15];
Porta2_7 = bit2[8];
Porta2_6 = bit2[9];
Porta2_5 = bit2[10];
Porta2_4 = bit2[11];
Porta2_3 = bit2[12];
Porta2_2 = bit2[13];
Porta2_1 = bit2[14];
Porta2_0 = bit2[15];
Porta3_7 = bit3[8];
Porta3_6 = bit3[9];
Porta3_5 = bit3[10];
Porta3_4 = bit3[11];
Porta3_3 = bit3[12];
Porta3_2 = bit3[13];
Porta3_1 = bit3[14];
Porta3_0 = bit3[15];
// wait(1);
// btts = 2;
//} else if (mybutton == 0 & btts == 2) {
Porta0_7 = bit0[16];
Porta0_6 = bit0[17];
Porta0_5 = bit0[18];
Porta0_4 = bit0[19];
Porta0_3 = bit0[20];
Porta0_2 = bit0[21];
Porta0_1 = bit0[22];
Porta0_0 = bit0[23];
Porta1_7 = bit1[16];
Porta1_6 = bit1[17];
Porta1_5 = bit1[18];
Porta1_4 = bit1[19];
Porta1_3 = bit1[20];
Porta1_2 = bit1[21];
Porta1_1 = bit1[22];
Porta1_0 = bit1[23];
Porta2_7 = bit2[16];
Porta2_6 = bit2[17];
Porta2_5 = bit2[18];
Porta2_4 = bit2[19];
Porta2_3 = bit2[20];
Porta2_2 = bit2[21];
Porta2_1 = bit2[22];
Porta2_0 = bit2[23];
Porta3_7 = bit3[16];
Porta3_6 = bit3[17];
Porta3_5 = bit3[18];
Porta3_4 = bit3[19];
Porta3_3 = bit3[20];
Porta3_2 = bit3[21];
Porta3_1 = bit3[22];
Porta3_0 = bit3[23];
// wait(1);
// btts = 3;
//} else if (mybutton == 0 & btts == 3) {
Porta0_7 = bit0[24];
Porta0_6 = bit0[25];
Porta0_5 = bit0[26];
Porta0_4 = bit0[27];
Porta0_3 = bit0[28];
Porta0_2 = bit0[29];
Porta0_1 = bit0[30];
Porta0_0 = bit0[31];
Porta1_7 = bit1[24];
Porta1_6 = bit1[25];
Porta1_5 = bit1[26];
Porta1_4 = bit1[27];
Porta1_3 = bit1[28];
Porta1_2 = bit1[29];
Porta1_1 = bit1[30];
Porta1_0 = bit1[31];
Porta2_7 = bit2[24];
Porta2_6 = bit2[25];
Porta2_5 = bit2[26];
Porta2_4 = bit2[27];
Porta2_3 = bit2[28];
Porta2_2 = bit2[29];
Porta2_1 = bit2[30];
Porta2_0 = bit2[31];
Porta3_7 = bit3[24];
Porta3_6 = bit3[25];
Porta3_5 = bit3[26];
Porta3_4 = bit3[27];
Porta3_3 = bit3[28];
Porta3_2 = bit3[29];
Porta3_1 = bit3[30];
Porta3_0 = bit3[31];
// wait(1);
// btts = 4;
//} else if (mybutton == 0 & btts == 4)
// {
// break;
// }
// }
}
int* charbit(char*c,char*d)
{
int msb1[32];
int msb2[32];
int msb3[32];
int i;
char a[4];
char b[4];
for(i=0;i<4;i++)
{
a[i] = c[i];
}
for(i=0;i<4;i++)
{
b[i] = d[i];
}
for (i=0;i<8;i++)
{
msb1[i] = ( a[0] & 0x80 ) != 0x00;
a[0]=a[0]<<1;
}
for (i=8;i<16;i++)
{
msb1[i] = ( a[1] & 0x80 ) != 0x00;
a[1]=a[1]<<1;
}
for (i=16;i<24;i++)
{
msb1[i] = ( a[2] & 0x80 ) != 0x00;
a[2]=a[2]<<1;
}
for (i=24;i<32;i++)
{
msb1[i] = ( a[3] & 0x80 ) != 0x00;
a[3]=a[3]<<1;
}
for (i=0;i<8;i++)
{
msb2[i] = ( b[0] & 0x80 ) != 0x00;
b[0]=b[0]<<1;
}
for (i=8;i<16;i++)
{
msb2[i] = ( b[1] & 0x80 ) != 0x00;
b[1]=b[1]<<1;
}
for (i=16;i<24;i++)
{
msb2[i] = ( b[2] & 0x80 ) != 0x00;
b[2]=b[2]<<1;
}
for (i=24;i<32;i++)
{
msb2[i] = ( b[3] & 0x80 ) != 0x00;
b[3]=b[3]<<1;
}
for (i=0;i<32;i++)
{
msb3[i] = msb1[i] & msb2[i];
}
return &msb3[0];
}
void crc_cal()
{
_Crc32Table_TGP_DUT.UINT32_Poly = 0xE7994FEB;
_Crc32Table_TGP_DUT.UINT32_Init = 0xFFFFFFFF;
_Crc32Table_TGP_DUT.BOOL_RefIn = FALSE;
_Crc32Table_TGP_DUT.BOOL_RefOut = FALSE;
_Crc32Table_TGP_DUT.UINT32_XorOut = 0x00000000;
/* Inizializzazione della tabella */
ERROR_Value = CRC32BIT_LOOKUP_Init(&_Crc32Table_TGP_DUT);
crc = CRC32BIT_LOOKUP_Compute(vettore,11,&_Crc32Table_TGP_DUT);
crcchar[0] = (crc >> 24) & 0xFF;
crcchar[1] = (crc >> 16) & 0xFF;
crcchar[2] = (crc >> 8) & 0xFF;
crcchar[3] = crc & 0xFF;
}