| 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++; |