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 demQuick Guide für den SpartanMC SoC