static void init(void) { usart1_init(115200, buf_in, ARR_LEN(buf_in), buf_out, ARR_LEN(buf_out)); sysclock_init(); can_init(); sei(); puts_P(PSTR("Init complete\n\n")); }
static void init(void) { sysclock_init(); _delay_ms(100); button_init(); can_init(); sei(); puts_P(PSTR("Init complete\n\n")); }
void initialize_hardware(){ sysclock_init(); LPC_MRT->Channel[0].CTRL=(1u<<1); //multi-rate timer canal 0 en mode 'one-shot interrupt' assign_pins(); // assignation des périphériques aux broches //LPC_SYSCON->IRQLATENCY=40; NVIC_SetPriority(SCT_IRQn,0); // plus haute priorité d'interruption NVIC_SetPriority(MRT_IRQn,3); // plus basse priorité PWM_init(); SPI0_init(); }//f()
void setup(void) { unsigned char i; watchdog_disable(); XBR0 = 0x01; // Enable RX/TX XBR1 = 0x40; // Enable crossbar P0MDOUT = 0x90; // P0.4: TX, P0.7: RS485 enable Push/Pull P0SKIP = 0x0C; // Skip P0.2&3 for Xtal P0MDIN = 0xF3; // P0.2&3 as analog input for Xtal P2MDOUT = 0x02; // P2.1 for external watchdog OSCXCN = 0; OSCICN |= 0x03; // Configure internal oscillator for // its maximum frequency CLKMUL = 0x00; // Select internal oscillator as // input to clock multiplier CLKMUL |= 0x80; // Enable clock multiplier for (i=0 ; i<100 ; i++); // Delay for >5us CLKMUL |= 0xC0; // Initialize the clock multiplier while(!(CLKMUL & 0x20)); // Wait for multiplier to lock CLKSEL |= USB_4X_CLOCK; // Select USB clock CLKSEL |= SYS_INT_OSC; // Select system clock VDM0CN = 0x80; // VDD monitor enable while ((VDM0CN & 0x40)==0); // wait for VDD monitor to stabilize /* start system clock */ sysclock_init(); /* init memory */ RS485_ENABLE = 0; /* initialize UART0 */ uart_init(0, BD_115200); PS0 = 1; // serial interrupt high priority /* Blink LEDs */ led_blink(0, 3, 150); led_blink(1, 3, 150); /* invert first LED */ led_mode(0, 1); /* dummy to prevent linker error */ delay_us(1); }
static void init(void) { usart1_init(115200, buf_in, ARR_LEN(buf_in), buf_out, ARR_LEN(buf_out)); sysclock_init(); adc_init(1, AVCC, 4); can_init(); vnh2sp30_init(); vnh2sp30_active_break_to_Vcc(); SET_PIN_MODE(NEUT_PORT, NEUT_PIN, INPUT_PULLUP); SET_PIN_MODE(IGN_PORT, IGN_PIN, OUTPUT); IGNITION_UNCUT(); can_subscribe(PADDLE_STATUS); can_subscribe(NEUTRAL_ENABLED); can_subscribe(GEAR_STOP_BUTTON); can_subscribe(RESET_GEAR_ESTIMATE); sei(); puts_P(PSTR("Init complete\n\n")); }
int main(void) { extern struct keypad buttons[MAX_BUTTONS]; extern volatile uint8_t SBstore[MAX_BUTTONS]; extern uint8_t total_buttons; uint8_t pov[4] = {0}; /* Configure the system clock, Initializes the Flash interface and the Systick */ sysclock_init(); /* Initialize all configured peripherals */ gpio_init(); // adc_init(); MX_USB_DEVICE_Init(); while (1) { fill_buffer_4_axises(); CheckRotaries(); for (uint8_t i=0;i<MAX_POVS;i++) { pov[i]=0; } for (uint8_t i=0;i<total_buttons;i++) { if (SBstore[i] == pov1up_button){ if (buttons[i].pressed) pov[0] |= 1<<3; } if (SBstore[i] == pov1right_button){ if (buttons[i].pressed) pov[0] |= 1<<2; } if (SBstore[i] == pov1down_button){ if (buttons[i].pressed) pov[0] |= 1<<1; } if (SBstore[i] == pov1left_button){ if (buttons[i].pressed) pov[0] |= 1; } if (SBstore[i] == pov2up_button){ if (buttons[i].pressed) pov[1] |= 1<<3; } if (SBstore[i] == pov2right_button){ if (buttons[i].pressed) pov[1] |= 1<<2; } if (SBstore[i] == pov2down_button){ if (buttons[i].pressed) pov[1] |= 1<<1; } if (SBstore[i] == pov2left_button){ if (buttons[i].pressed) pov[1] |= 1; } if (SBstore[i] == pov3up_button){ if (buttons[i].pressed) pov[2] |= 1<<3; } if (SBstore[i] == pov3right_button){ if (buttons[i].pressed) pov[2] |= 1<<2; } if (SBstore[i] == pov3down_button){ if (buttons[i].pressed) pov[2] |= 1<<1; } if (SBstore[i] == pov3left_button){ if (buttons[i].pressed) pov[2] |= 1; } if (SBstore[i] == pov4up_button){ if (buttons[i].pressed) pov[3] |= 1<<3; } if (SBstore[i] == pov4right_button){ if (buttons[i].pressed) pov[3] |= 1<<2; } if (SBstore[i] == pov4down_button){ if (buttons[i].pressed) pov[3] |= 1<<1; } if (SBstore[i] == pov4left_button){ if (buttons[i].pressed) pov[3] |= 1; } if (SBstore[i] == joystick_button) { if (buttons[i].pressed){ //USBSendBuffer[i/8+1] |= ButtonsCodes[i%8]; gamepad_report.buttons |= 1ULL<<i; } else { //USBSendBuffer[i/8+1] &= ~ButtonsCodes[i%8]; gamepad_report.buttons &= ~(1ULL<<i); } } if (SBstore[i] == mouseleft_button){ if (buttons[i].pressed){ mouse_report.left_button = 1; } else { mouse_report.left_button = 0; } } if (SBstore[i] == mousemiddle_button){ if (buttons[i].pressed){ mouse_report.middle_button = 1; } else { mouse_report.middle_button = 0; } } if (SBstore[i] == mouseright_button){ if (buttons[i].pressed){ mouse_report.right_button = 1; } else { mouse_report.right_button = 0; } } if (SBstore[i] == leftcontrol_button){ if (buttons[i].pressed){ keyboard_report.left_ctrl = 1; } else { keyboard_report.left_ctrl = 0; } } if (SBstore[i] == leftshift_button){ if (buttons[i].pressed){ keyboard_report.left_shft = 1; } else { keyboard_report.left_shft = 0; } } if (SBstore[i] == leftalt_button){ if (buttons[i].pressed){ keyboard_report.left_alt = 1; } else { keyboard_report.left_alt = 0; } } if (SBstore[i] == leftgui_button){ if (buttons[i].pressed){ keyboard_report.left_gui = 1; } else { keyboard_report.left_gui = 0; } } if (SBstore[i] == rightcontrol_button){ if (buttons[i].pressed){ keyboard_report.right_ctrl = 1; } else { keyboard_report.right_ctrl = 0; } } if (SBstore[i] == rightshift_button){ if (buttons[i].pressed){ keyboard_report.right_shft = 1; } else { keyboard_report.right_shft = 0; } } if (SBstore[i] == rightalt_button){ if (buttons[i].pressed){ keyboard_report.right_alt = 1; } else { keyboard_report.right_alt = 0; } } if (SBstore[i] == rightgui_button){ if (buttons[i].pressed){ keyboard_report.right_gui = 1; } else { keyboard_report.right_gui = 0; } } if (((SBstore[i] >= a_button) && (SBstore[i] <= space_button)) || ((SBstore[i] >= f1_button) && (SBstore[i] <= f12_button)) || ((SBstore[i] >= insert_button) && (SBstore[i] <= uparrow_button))) { if (buttons[i].pressed){ keyboard_report.key1 = SBstore[i]; } else { keyboard_report.key1 = 0; } } if (SBstore[i] == volumemute_button) { if (buttons[i].pressed){ multimedia_report.volume_mute = 1; } else { multimedia_report.volume_mute = 0; } } if (SBstore[i] == volumeup_button) { if (buttons[i].pressed){ multimedia_report.volume_up = 1; } else { multimedia_report.volume_up = 0; } } if (SBstore[i] == volumedown_button) { if (buttons[i].pressed){ multimedia_report.volume_down = 1; } else { multimedia_report.volume_down = 0; } } } for (uint8_t i=0;i<MAX_POVS;i++) { switch (pov[i]) { case (8) : gamepad_report.pov[i] = 0; break; case (12) : gamepad_report.pov[i] = 1; break; case (4) : gamepad_report.pov[i] = 2; break; case (6) : gamepad_report.pov[i] = 3; break; case (2) : gamepad_report.pov[i] = 4; break; case (3) : gamepad_report.pov[i] = 5; break; case (1) : gamepad_report.pov[i] = 6; break; case (9) : gamepad_report.pov[i] = 7; break; default : gamepad_report.pov[i] = 8; break; } } /* for (uint8_t i=0;i<Number_Rotaries + config.total_single_encoders;i++){ diff = millis - RotaryStore[i].time_pressed; if (diff > config.rotary_press_time) { USBSendBuffer[(i/4)+encoders_offset] &= ~ButtonsCodes[(i%4)*2]; USBSendBuffer[(i/4)+encoders_offset] &= ~ButtonsCodes[(i%4)*2+1]; RotaryStore[i].pressed = 0; RotaryStore[i].previous_state = 0; } else { if (!RotaryStore[i].previous_state){ if (RotaryStore[i].pressed == DIR_CW) { USBSendBuffer[(i/4)+encoders_offset] |= ButtonsCodes[(i%4)*2]; } if (RotaryStore[i].pressed == DIR_CCW) { USBSendBuffer[(i/4)+encoders_offset] |= ButtonsCodes[(i%4)*2+1]; } RotaryStore[i].previous_state = RotaryStore[i].pressed; } } } if (!RotaryStore[i].pressed) { USBSendBuffer[(i/4)+encoders_offset] &= ~ButtonsCodes[(i%4)*2]; USBSendBuffer[(i/4)+encoders_offset] &= ~ButtonsCodes[(i%4)*2+1]; } if (RotaryStore[i].pressed == DIR_CW) { if ( diff > config.rotary_press_time){ USBSendBuffer[(i/4)+encoders_offset] &= ~ButtonsCodes[(i%4)*2]; RotaryStore[i].pressed = 0; } else USBSendBuffer[(i/4)+encoders_offset] |= ButtonsCodes[(i%4)*2]; } if (RotaryStore[i].pressed == DIR_CCW) { if (diff > config.rotary_press_time){ USBSendBuffer[(i/4)+encoders_offset] &= ~ButtonsCodes[(i%4)*2+1]; RotaryStore[i].pressed = 0; } else USBSendBuffer[(i/4)+encoders_offset] |= ButtonsCodes[(i%4)*2+1]; } } */ //We should send report only if some action exist /* for (uint8_t i=1;i<21;i++) { chk |= USBSendBuffer[i]; } for (uint8_t i=21;i<25;i++) { if (USBSendBuffer[i] != 8) chk |= USBSendBuffer[i]; } if (chk) { USBD_CUSTOM_HID_SendReport(hUsbDevice_0, USBSendBuffer, USEDPINS+1); packet_counter=0; } else { packet_counter++; if (packet_counter < 6) USBD_CUSTOM_HID_SendReport(hUsbDevice_0, USBSendBuffer, USEDPINS+1); }*/ } }
void setup(void) { unsigned char adr, flags, d; unsigned short i; unsigned char *p; _flkey = 0; /* first disable watchdog */ watchdog_disable(); /* avoid any blocking of RS485 bus */ RS485_ENABLE = RS485_ENABLE_OFF; /* Port and oscillator configuration */ #if defined(CPU_C8051F120) SFRPAGE = CONFIG_PAGE; XBR0 = 0x04; // Enable XBar, UART0 & UART1 XBR1 = 0x00; XBR2 = 0x44; #ifdef CLK_25MHZ /* Select internal quartz oscillator */ SFRPAGE = LEGACY_PAGE; FLSCL = 0x00; // set flash read time for <25 MHz SFRPAGE = CONFIG_PAGE; OSCICN = 0x83; // divide by 1 CLKSEL = 0x00; // select internal oscillator #else // 98 MHz /* Select internal quartz oscillator */ SFRPAGE = LEGACY_PAGE; FLSCL = 0xB0; // set flash read time for 100 MHz SFRPAGE = CONFIG_PAGE; OSCICN = 0x83; // divide by 1 CLKSEL = 0x00; // select internal oscillator PLL0CN |= 0x01; PLL0DIV = 0x01; PLL0FLT = 0x01; PLL0MUL = 0x04; for (i = 0 ; i < 15; i++); // Wait 5us for initialization PLL0CN |= 0x02; for (i = 0 ; i<50000 && ((PLL0CN & 0x10) == 0) ; i++); CLKSEL = 0x02; // select PLL as sysclk src #endif #elif defined(CPU_C8051F020) XBR0 = 0x04; // Enable UART0 & UART1 XBR1 = 0x00; XBR2 = 0x44; /* Select external quartz oscillator */ OSCXCN = 0x67; // Crystal mode, Power Factor 22E6 OSCICN = 0x08; // CLKSL=1 (external) #elif defined(CPU_C8051F310) || defined(CPU_C8051F320) XBR0 = 0x01; // Enable RX/TX XBR1 = 0x40; // Enable crossbar /* Select internal quartz oscillator */ OSCICN = 0x83; // IOSCEN=1, SYSCLK=24.5 MHz CLKSEL = 0x00; // derive SYSCLK from internal source #else XBR0 = 0x04; // Enable RX/TX XBR1 = 0x00; XBR2 = 0x40; // Enable crossbar PRT0CF = 0x01; // P0.0: TX = Push Pull PRT1CF = 0x00; // P1 PRT2CF = 0x00; // P2 Open drain for 5V LCD PRT3CF = 0x20; // P3.5: RS485 enable = Push Pull /* Select external quartz oscillator */ OSCXCN = 0x67; // Crystal mode, Power Factor 22E6 OSCICN = 0x08; // CLKSL=1 (external) #endif #ifdef CFG_HAVE_LCD lcd_setup(); #endif #ifdef CFG_HAVE_EMIF /* initialize external memory interface */ d = emif_init(); /* do memory test on cold start */ SFRPAGE = LEGACY_PAGE; if (d > 0 && (RSTSRC & 0x02) > 0) emif_test(d); #endif /* start system clock */ sysclock_init(); /* enable watchdog with default timeout */ watchdog_enable(0); /* enable missing clock detector */ RSTSRC |= 0x04; /* default LED mode */ for (i=0 ; i<N_LED ; i++) led_mode(i, 1); /* initialize all memory */ CSR = 0; addressed = 0; flash_param = 0; flash_program = 0; flash_allowed = 0; wrong_cpu = 0; _flkey = 0; #ifdef CFG_HAVE_RTC rtc_set = 0; #endif i_in = i_out = n_out = 0; _cur_sub_addr = 0; for (i=0 ; i<sizeof(in_buf) ; i++) in_buf[i] = 0; for (i=0 ; i<sizeof(out_buf) ; i++) out_buf[i] = 0; /* check if we got reset by watchdog */ #if defined(CPU_C8051F120) SFRPAGE = LEGACY_PAGE; #endif WD_RESET = ((RSTSRC & 0x02) == 0 && (RSTSRC & 0x08) > 0); /* initialize UART(s) */ uart_init(0, BD_115200); #ifdef CFG_UART1_MSCB uart_init(1, BD_115200); #endif #ifdef CFG_DYN_VARIABLES setup_variables(); #endif /* count variables */ for (n_variables = _var_size = 0;; n_variables++) { _var_size += variables[n_variables].width; if (variables[n_variables].width == 0) break; } /* check if variables are in xdata and xdata is present */ if (n_variables > 0) { p = variables[0].ud; d = *p; *p = 0x55; if (*p != 0x55) wrong_cpu = 1; *p = 0xAA; if (*p != 0xAA) wrong_cpu = 1; *p = d; } /* retrieve EEPROM data */ #ifdef CPU_C8051F120 SFRPAGE = LEGACY_PAGE; #endif if ((RSTSRC & 0x02) > 0) flags = eeprom_retrieve(1); // vars on cold start else flags = eeprom_retrieve(0); if ((flags & (1 << 0)) == 0) { configured_addr = 0; /* set initial values */ sys_info.node_addr = 0xFFFF; sys_info.group_addr = 0xFFFF; memset(sys_info.node_name, 0, sizeof(sys_info.node_name)); strncpy(sys_info.node_name, node_name, sizeof(sys_info.node_name)); } else configured_addr = 1; /* store SVN revision */ sys_info.svn_revision = (svn_rev_main[6]-'0')*1000+ (svn_rev_main[7]-'0')*100+ (svn_rev_main[8]-'0')*10+ (svn_rev_main[9]-'0'); if ((flags & (1 << 1)) == 0) { /* init variables */ for (i = 0; variables[i].width; i++) if (!(variables[i].flags & MSCBF_DATALESS)) { /* do it for each sub-address */ for (adr = 0 ; adr < _n_sub_addr ; adr++) { memset((char*)variables[i].ud + _var_size*adr, 0, variables[i].width); } } /* call user initialization routine with initialization */ user_init(1); /* write current variables to flash later in main routine */ configured_vars = 0; } else { /* call user initialization routine without initialization */ user_init(0); configured_vars = 1; } /* Blink LEDs */ for (i=0 ; i<N_LED ; i++) led_blink(i, 3, 150); }
void setup(void) { int i; // software timer WDTCN = 0xDE; // Disable watchdog timer WDTCN = 0xAD; SFRPAGE = CONFIG_PAGE; // set SFR page XBR0 = 0x04; // Enable UART0 & UART1 XBR1 = 0x00; XBR2 = 0x44; // all pins used by the external memory interface are in push-pull mode P0MDOUT = 0xFF; P1MDOUT = 0xFF; P2MDOUT = 0xFF; P3MDOUT = 0xFF; P0 = 0xC0; // /WR, /RD, are high, RESET is low P1 = 0x00; P2 = 0x00; // P1, P2 contain the address lines P3 = 0xFF; // P3 contains the data lines OSCICN = 0x83; // set internal oscillator to run // at its maximum frequency CLKSEL = 0x00; // Select the internal osc. as // the SYSCLK source //Turn on the PLL and increase the system clock by a factor of M/N = 2 SFRPAGE = CONFIG_PAGE; PLL0CN = 0x00; // Set internal osc. as PLL source SFRPAGE = LEGACY_PAGE; FLSCL = 0x10; // Set FLASH read time for 50MHz clk // or less SFRPAGE = CONFIG_PAGE; PLL0CN |= 0x01; // Enable Power to PLL PLL0DIV = 0x01; // Set Pre-divide value to N (N = 1) PLL0FLT = 0x01; // Set the PLL filter register for // a reference clock from 19 - 30 MHz // and an output clock from 45 - 80 MHz PLL0MUL = 0x02; // Multiply SYSCLK by M (M = 2) for (i = 0; i < 256; i++); // Wait at least 5us PLL0CN |= 0x02; // Enable the PLL while (!(PLL0CN & 0x10)); // Wait until PLL frequency is locked CLKSEL = 0x02; // Select PLL as SYSCLK source SFRPAGE = LEGACY_PAGE; EMI0CF = 0xD7; // Split-Mode, non-multiplexed // on P0-P3 (use 0xF7 for P4 - P7) EMI0TC = 0xB7; // This value may be modified // according to SYSCLK to meet the // timing requirements for the CS8900A // For example, EMI0TC should be >= 0xB7 // for a 100 MHz SYSCLK. SFRPAGE = ADC0_PAGE; AMX0CF = 0x00; // select single ended analog inputs ADC0CF = 0xE0; // 16 system clocks, gain 1 ADC0CN = 0x80; // enable ADC REF0CN = 0x03; // enable internal reference DAC0CN = 0x80; // enable DAC0 DAC1CN = 0x80; // enable DAC1 /* init memory */ RS485_ENABLE = 0; /* start system clock */ sysclock_init(); CKCON = 0x00; // assumed by tcp_timer() /* Blink LEDs */ led_blink(0, 5, 150); led_blink(1, 5, 150); /* invert first LED */ led_mode(0, 1); }