void analogReadAveraging(unsigned int num) | void analogReadAveraging(unsigned int num) | ||||
{ | { | ||||
uint32_t tmp32, mode, avg=0; | |||||
uint32_t tmp32, mode; | |||||
//disable averaging | //disable averaging | ||||
tmp32 = ADC1_GC; | tmp32 = ADC1_GC; |
void configure_cache(void); | void configure_cache(void); | ||||
void unused_interrupt_vector(void); | void unused_interrupt_vector(void); | ||||
void usb_pll_start(); | void usb_pll_start(); | ||||
extern void analog_init(void); | |||||
extern void pwm_init(void); | |||||
uint32_t set_arm_clock(uint32_t frequency); | |||||
extern void analog_init(void); // analog.c | |||||
extern void pwm_init(void); // pwm.c | |||||
uint32_t set_arm_clock(uint32_t frequency); // clockspeed.c | |||||
extern void __libc_init_array(void); // C++ standard library | |||||
__attribute__((section(".startup"), optimize("no-tree-loop-distribute-patterns"))) | __attribute__((section(".startup"), optimize("no-tree-loop-distribute-patterns"))) | ||||
set_arm_clock(600000000); | set_arm_clock(600000000); | ||||
//set_arm_clock(984000000); Ludicrous Speed | //set_arm_clock(984000000); Ludicrous Speed | ||||
uint32_t armpll = CCM_ANALOG_PLL_ARM; | |||||
uint32_t armdiv = CCM_CACRR; | |||||
uint32_t cbcdr = CCM_CBCDR; | |||||
uint32_t cbcmr = CCM_CBCMR; | |||||
printf("ARM PLL = %u MHz\n", (armpll & 0x7F) * 12); | |||||
printf("ARM divisor = %u\n", armdiv + 1); | |||||
printf("AHB divisor = %u\n", ((cbcdr >> 10) & 7) + 1); | |||||
printf("IPG divisor = %u\n", ((cbcdr >> 8) & 3) + 1); | |||||
while (millis() < 20) ; // wait at least 20ms before starting USB | while (millis() < 20) ; // wait at least 20ms before starting USB | ||||
usb_init(); | usb_init(); | ||||
analog_init(); | analog_init(); |
#define USB_DESC_LIST_DEFINE | #define USB_DESC_LIST_DEFINE | ||||
#include "usb_desc.h" | #include "usb_desc.h" | ||||
#include "usb_serial.h" | #include "usb_serial.h" | ||||
#include "core_pins.h" // for delay() | |||||
#include <string.h> | #include <string.h> | ||||
#include "debug/printf.h" | #include "debug/printf.h" | ||||
//printf("USBPHY1_RX=%08lX\n", USBPHY1_RX); | //printf("USBPHY1_RX=%08lX\n", USBPHY1_RX); | ||||
//printf("USBPHY1_CTRL=%08lX\n", USBPHY1_CTRL); | //printf("USBPHY1_CTRL=%08lX\n", USBPHY1_CTRL); | ||||
//printf("USB1_USBMODE=%08lX\n", USB1_USBMODE); | //printf("USB1_USBMODE=%08lX\n", USB1_USBMODE); | ||||
delay(100); | |||||
delay(25); | |||||
} | } | ||||
#endif | #endif | ||||
// Device Controller Initialization, page 3161 | // Device Controller Initialization, page 3161 |
} | } | ||||
static transfer_t volatile transfer __attribute__ ((used, aligned(32))); | |||||
static transfer_t transfer __attribute__ ((used, aligned(32))); | |||||
static uint8_t txbuffer[1024]; | static uint8_t txbuffer[1024]; | ||||
//static uint8_t txbuffer1[1024]; | //static uint8_t txbuffer1[1024]; | ||||
//static uint8_t txbuffer2[1024]; | //static uint8_t txbuffer2[1024]; | ||||
int count=0; | int count=0; | ||||
//digitalWriteFast(13, HIGH); | //digitalWriteFast(13, HIGH); | ||||
while (1) { | while (1) { | ||||
uint32_t status = (volatile)(transfer.status); | |||||
uint32_t status = transfer.status; | |||||
if (count > 10) printf("status = %x\n", status); | if (count > 10) printf("status = %x\n", status); | ||||
if (!(status & 0x80)) break; | if (!(status & 0x80)) break; | ||||
count++; | count++; |