USB Zufallszahlen Generator

Kleines Projekt auf dem SP601 Board

#include <system/peripherals.h>
#include <interrupt.h>
#include <usb.h>

#define PACKET_SIZE 32
struct usb_ep ep_tx = USB_ENDPOINT(SB_USB11_0_DMA_BASE_ADR,1);
struct usb_ep epirx = USB_ENDPOINT(SB_USB11_0_DMA_BASE_ADR,2);
unsigned int lfsr;

unsigned int get_random_number() {
    unsigned int i, bit;
    for (i=0; i<16; i++) {
        bit  = (lfsr^(lfsr>>2)^(lfsr>>3)^(lfsr>>5))&1;
        lfsr = (lfsr>>1)|(bit<<15);
        }
    return lfsr;
}
void main() {
    unsigned int i;
    lfsr = 0xACE1;
    usb_init(USB11_0_DMA, 1);
    usb_ep_intr_en(&epirx);
    usb_ep_packet_receive(&epirx);
    interrupt_enable();
    while(1) {
        for(i=0; i<PACKET_SIZE; i++) {
            ep_tx.data[i] = get_random_number();
        }
        usb_ep_packet_send(&ep_tx, PACKET_SIZE);
        usb_ep_wait_txready(&ep_tx);
    }
}
// isr for EP0
void isr00() {
}
// isr for EP1
void isr01() {
}
// isr for EP2
void isr02() {
    usb_ep_intr_clear(&epirx);
    lfsr = epirx.data[0];
    usb_ep_packet_receive(&epirx);
}
// isr for P_GPIO_BUTTON0
void isr03() {
    lfsr = 0;
}

USB Zufallszahlen Generator (PRNG)

ein Beispiel aus dem

Quick Guide für den SpartanMC SoC




SpartanMC