Estoy intentando generar un Reloj sincronizado con datos, donde la frecuencia del reloj debe ser el doble de la frecuencia de los datos. Escribí un código para este propósito y funciona bien para 32 bits de datos, algo más que 32 generará un montón de 1s. Esto es lo que obtuve para datos de 64 bits = (0XAAAAAAAAAAAAAAAA):
Aquí está el código que escribí:
void DATA(unsigned long int number, int iteration){ //number: data to be send serially
// iteration: number of bits to send
unsigned long int x=0; //An integer to hold each bit from the data
char even = (char)0x1;
TIMER1->ICR |= (1<<0);
for(int y=0; y<=iteration;) {
while((TIMER1->RIS & 0x00000001) != 1){} //wait until Timer1 times out
TIMER1->ICR |= (1<<0); //Reset Timer1 flag
odd ^= (char)0x1;
GPIOC->DATA ^= (1<<7); //Toggle the clock at PC7
if (odd) continue; // data change every even cycle
x = number & (0x01UL << y); //Get each bit individually
if(x==(0x01UL<<y)) //If bit is 1
GPIOC->DATA |= (1<<6); //Make C6 High
else if(x==0X0) //If bit is 0
GPIOC->DATA &= ~(1<<6);//Make C6 Low
y++;
}
}
int main(){
DATA(0XAAAAAAAAAAAAAAAA,64);//
}
Nota: He intentado hacer que el número en mi función sea largo int largo, y eso no resolvió el problema también. ¿Hay alguna explicación para obtener esos 1 después de los primeros 32 bits?