void ModbusSpindleControl::on_module_loaded() { spindle_on = false; PinName rx_pin; PinName tx_pin; PinName dir_pin; // preparing PinName objects from the config string { Pin *smoothie_pin = new Pin(); smoothie_pin->from_string(THEKERNEL->config->value(spindle_checksum, spindle_rx_pin_checksum)->by_default("nc")->as_string()); smoothie_pin->as_input(); rx_pin = port_pin((PortName)smoothie_pin->port_number, smoothie_pin->pin); smoothie_pin->from_string(THEKERNEL->config->value(spindle_checksum, spindle_tx_pin_checksum)->by_default("nc")->as_string()); smoothie_pin->as_input(); tx_pin = port_pin((PortName)smoothie_pin->port_number, smoothie_pin->pin); smoothie_pin->from_string(THEKERNEL->config->value(spindle_checksum, spindle_dir_pin_checksum)->by_default("nc")->as_string()); smoothie_pin->as_input(); dir_pin = port_pin((PortName)smoothie_pin->port_number, smoothie_pin->pin); delete smoothie_pin; } // setup the Modbus interface modbus = new Modbus(tx_pin, rx_pin, dir_pin); // register for events register_for_event(ON_GCODE_RECEIVED); }
void HD_reset () { // LCD Reset port_pin(0,0, disable, high);// reset=1; delay(10); port_pin(0,0, disable, low);// reset=0; delay(100); port_pin(0,0, disable, high);// reset=1; delay(120); }
void write_command(uint8_t hexa) { port_pin(4,9, disable, low);//cs=0 port_pin(4,10, disable, low);//dc=0 xf_setup.length = sizeof(hexa); xf_setup.rx_data = Rx_Buf; xf_setup.rx_cnt = xf_setup.tx_cnt = 0; xf_setup.tx_data= hexa; Chip_SSP_Enable(LPC_SSP); Chip_SSP_RWFrames_Blocking(LPC_SSP, &xf_setup); port_pin(4,9, disable, high);//cs=1 }
void port_dir(port_t *obj, PinDirection dir) { uint32_t i; obj->direction = dir; for (i = 0; i < 16; i++) { // Process all pins if (obj->mask & (1 << i)) { // If the pin is used if (dir == PIN_OUTPUT) { pin_function(port_pin(obj->port, i), STM_PIN_DATA(GPIO_Mode_OUT, GPIO_OType_PP, GPIO_PuPd_NOPULL, 0xFF)); } else { // PIN_INPUT pin_function(port_pin(obj->port, i), STM_PIN_DATA(GPIO_Mode_IN, 0, GPIO_PuPd_NOPULL, 0xFF)); } } } }
void port_mode(port_t *obj, PinMode mode) { uint32_t i; for (i = 0; i < 16; i++) { // Process all pins if (obj->mask & (1 << i)) { // If the pin is used pin_mode(port_pin(obj->port, i), mode); } } }
void rele_off(uint8_t rele_n) { switch(rele_n) { case DOUT0: port_pin(4,4, disable, low); break; case DOUT1: port_pin(4,5, disable, low); break; case DOUT2: port_pin(4,6, disable, low); break; case DOUT3: port_pin(2,1, disable, low); break; } }
void open_drain_off(uint8_t drain_n) { switch(drain_n) { case DOUT4: port_pin(4,8, disable, high); break; case DOUT5: port_pin(4,9, disable, high); break; case DOUT6: port_pin(4,10, disable,high); break; case DOUT7: port_pin(1,5, disable,high); break; } }
void port_mode(port_t *obj, PinMode mode) { uint32_t i; // The mode is set per pin: reuse pinmap logic for (i=0; i<32; i++) { if (obj->mask & (1<<i)) { pin_mode(port_pin(obj->port, i), mode); } } }
void port_dir(port_t *obj, PinDirection dir) { uint32_t i; // The mode is set per pin: reuse gpio logic for (i=0; i<32; i++) { if (obj->mask & (1<<i)) { pin_dir(port_pin(obj->port, i), dir); } } }
void port_init(port_t *obj, PortName port, int mask, PinDirection dir) { obj->port = port; obj->mask = mask; obj->reg_out = &MXC_GPIO->out_val[port]; obj->reg_in = &MXC_GPIO->in_val[port]; /* Ensure that the GPIO clock is enabled */ MXC_CLKMAN->sys_clk_ctrl_6_gpio = MXC_S_CLKMAN_CLK_SCALE_DIV_1; uint32_t i; // The function is set per pin: reuse gpio logic for (i=0; i<32; i++) { if (obj->mask & (1<<i)) { gpio_set(port_pin(obj->port, i)); pin_dir(port_pin(obj->port, i), dir); } } }
void port_mode(port_t *obj, PinMode mode) { /* Set mode for pins given by mask */ uint32_t pin; for (pin = 0; pin < PORT_NUM_PINS; pin++) { if (obj->mask & (1 << pin)) { pin_mode(port_pin(obj->port, pin), mode); } } }
void port_mode(port_t *obj, PinMode mode) { uint32_t i; for (i = 0; i < GPIO_PIN_MAX; i++) { if (obj->mask & (1 << i)) { pin_mode(port_pin(obj->port, i), mode); } } }
void rele_init(void) { /*Inicializo salidas a relé*/ port_pin(4,4, MD_PUP,init_out); port_pin(4,5, MD_PUP,init_out); port_pin(4,6, MD_PUP,init_out); port_pin(2,1,MD_PUP,init_out); /*desenergizo las bobinas de los relés*/ port_pin(4,4, disable, low); port_pin(4,5, disable, low); port_pin(4,6, disable, low); port_pin(2,1,disable, low); }
void open_drain_init(void) { /*inicializo salidas open drain*/ port_pin(4,8, MD_PUP,init_out); port_pin(4,9, MD_PUP,init_out); port_pin(4,10, MD_PUP,init_out); port_pin(1,5,MD_PUP,init_out); /*salidas open drain OFF*/ port_pin(4,8, disable, high); port_pin(4,9, disable, high); port_pin(4,10, disable,high); port_pin(1,5,disable, high); }
void port_init(port_t *obj, PortName port, int mask, PinDirection dir) { obj->port = port; obj->mask = mask; // The function is set per pin: reuse gpio logic for (uint32_t i = 0; i < 32; i++) { if (obj->mask & (1 << i)) { gpio_set(port_pin(obj->port, i)); } } port_dir(obj, dir); }
void port_init(port_t *obj, PortName port, int mask, PinDirection dir) { obj->port = port; obj->mask = mask; obj->direction = dir; uint32_t i; obj->direction = dir; for (i = 0; i < GPIO_PIN_MAX; i++) { if (obj->mask & (1 << i)) { gpio_set(port_pin(port, i)); } } port_dir(obj, dir); }
void port_init(port_t *obj, PortName port, int mask, PinDirection dir) { obj->port = port; obj->mask = mask; LPC_GPIO_TypeDef *port_reg = ((LPC_GPIO_TypeDef *) (LPC_GPIO0_BASE + (port * 0x10000))); obj->reg_data = &port_reg->DATA; obj->reg_dir = &port_reg->DIR; uint32_t i; // The function is set per pin: reuse gpio logic for (i=0; i<12; i++) { if (obj->mask & (1<<i)) { gpio_set(port_pin(obj->port, i)); } } port_dir(obj, dir); }
void port_init(port_t *obj, PortName port, int mask, PinDirection dir) { obj->port = port; obj->mask = mask; LPC_GPIO->MASK[port] = ~mask; obj->reg_mpin = &LPC_GPIO->MPIN[port]; obj->reg_dir = &LPC_GPIO->DIR[port]; uint32_t i; // The function is set per pin: reuse gpio logic for (i=0; i<32; i++) { if (obj->mask & (1<<i)) { gpio_set(port_pin(obj->port, i)); } } port_dir(obj, dir); }
void port_init(port_t *obj, PortName port, int mask, PinDirection dir) { obj->port = port; obj->mask = mask; GPIO_Type *reg = (GPIO_Type *)(PTA_BASE + port * 0x40); obj->reg_out = ®->PDOR; obj->reg_in = ®->PDIR; obj->reg_dir = ®->PDDR; uint32_t i; // The function is set per pin: reuse gpio logic for (i=0; i<32; i++) { if (obj->mask & (1<<i)) { gpio_set(port_pin(obj->port, i)); } } port_dir(obj, dir); }
void port_init(port_t *obj, PortName port, int mask, PinDirection dir) { obj->port = port; obj->mask = mask; CMSDK_GPIO_TypeDef *port_reg = (CMSDK_GPIO_TypeDef *)(CMSDK_GPIO0_BASE + ((int)port * 0x10)); obj->reg_in = &port_reg->DATAOUT; obj->reg_dir = &port_reg->OUTENABLESET; obj->reg_dirclr = &port_reg->OUTENABLECLR; uint32_t i; // The function is set per pin: reuse gpio logic for (i=0; i<16; i++) { if (obj->mask & (1<<i)) { gpio_set(port_pin(obj->port, i)); } } port_dir(obj, dir); }
void port_init(port_t *obj, PortName port, int mask, PinDirection dir) { obj->port = port; obj->mask = mask; LPC_GPIO_TypeDef *port_reg = (LPC_GPIO_TypeDef *)(LPC_GPIO0_BASE + ((int)port * 0x20)); port_reg->MASK = ~mask; obj->reg_out = &port_reg->PIN; obj->reg_in = &port_reg->PIN; obj->reg_dir = &port_reg->DIR; uint32_t i; // The function is set per pin: reuse gpio logic for (i=0; i<32; i++) { if (obj->mask & (1<<i)) { gpio_set(port_pin(obj->port, i)); } } port_dir(obj, dir); }
void port_init(port_t *obj, PortName port, int mask, PinDirection dir) { obj->port = port; obj->mask = mask; LPC_GPIO_T *port_reg = (LPC_GPIO_T *)(LPC_GPIO_PORT_BASE); // Do not use masking, because it prevents the use of the unmasked pins // port_reg->MASK[port] = ~mask; obj->reg_out = &port_reg->PIN[port]; obj->reg_in = &port_reg->PIN[port]; obj->reg_dir = &port_reg->DIR[port]; uint32_t i; // The function is set per pin: reuse gpio logic for (i=0; i<32; i++) { if (obj->mask & (1<<i)) { gpio_set(port_pin(obj->port, i)); } } port_dir(obj, dir); }
void port_init(port_t *obj, PortName port, int mask, PinDirection dir) { obj->port = port; obj->mask = mask; LPC_GPIO_TypeDef *port_reg = (LPC_GPIO_TypeDef *)(LPC_GPIO0_BASE + ((int)port * 0x20)); // Do not use masking, because it prevents the use of the unmasked pins // port_reg->FIOMASK = ~mask; obj->reg_out = &port_reg->FIOPIN; obj->reg_in = &port_reg->FIOPIN; obj->reg_dir = &port_reg->FIODIR; uint32_t i; // The function is set per pin: reuse gpio logic for (i=0; i<32; i++) { if (obj->mask & (1<<i)) { gpio_set(port_pin(obj->port, i)); } } port_dir(obj, dir); }
void led_off(uint8_t led_n) { switch(led_n) { case LED1 : port_pin(2,10, disable, low); break; case LED2 : port_pin(2,11, disable, low); break; case LED3 : port_pin(2,12, disable, low); break; case LED_RGB_R : port_pin(2,0, disable, low); break; case LED_RGB_G : port_pin(2,1, disable, low); break; case LED_RGB_B : port_pin(2,2, disable, low); break; } }
void wr_com16(uint8_t hexa1,uint8_t hexa2) { port_pin(4,9, disable, low);//cs=0 port_pin(4,10, disable, high);//dc=1 xf_setup.length = sizeof(hexa1); xf_setup.rx_data = Rx_Buf; xf_setup.rx_cnt = xf_setup.tx_cnt = 0; xf_setup.tx_data = hexa1; Chip_SSP_RWFrames_Blocking(LPC_SSP, &xf_setup); port_pin(4,9, disable, high);//cs=0 port_pin(4,9, disable, low);//cs=1 port_pin(4,10, disable, high);//dc=1 xf_setup.length = sizeof(hexa2); xf_setup.rx_data = Rx_Buf; xf_setup.rx_cnt = xf_setup.tx_cnt = 0; xf_setup.tx_data= hexa2; Chip_SSP_RWFrames_Blocking(LPC_SSP, &xf_setup); port_pin(4,9, disable, high);//cs=1 }
int main(void) { // NOTA: El siguiente código se programó sin la capa de abstracción: leds.c y // pulsadores.c para mostrar un ejemplo de la forma de acceso a un pin de un // puerto con la función puerto_pin(...); port_pin(2,0, MD_PUP,init_out); port_pin(2,1, MD_PUP,init_out); port_pin(2,2, MD_PUP,init_out); port_pin(2,10,MD_PUP,init_out); port_pin(2,11,MD_PUP,init_out); port_pin(2,12,MD_PUP,init_out); port_pin(2,0, disable, low); port_pin(2,1, disable, low); port_pin(2,2, disable, low); port_pin(2,10,disable, low); port_pin(2,11,disable, low); port_pin(2,12,disable, low); port_pin(1,0, MD_PUP|MD_EZI|MD_ZI,init_in); port_pin(1,1, MD_PUP|MD_EZI|MD_ZI,init_in); port_pin(1,2, MD_PUP|MD_EZI|MD_ZI,init_in); port_pin(1,6, MD_PUP|MD_EZI|MD_ZI,init_in); while(1){ if(!port_pin(1,0,disable,state_in)) { port_pin(2,0, disable, high); port_pin(2,1, disable, high); port_pin(2,2, disable, high); } else{port_pin(2,0, disable, low); port_pin(2,1, disable, low); port_pin(2,2, disable, low); } if(!port_pin(1,1,disable,state_in)) { port_pin(2,10, disable, high); } else{port_pin(2,10, disable, low); } if(!port_pin(1,2,disable,state_in)) { port_pin(2,11, disable, high); } else{port_pin(2,11, disable, low); } if(!port_pin(1,6,disable,state_in)) { port_pin(2,12, disable, high); } else{ port_pin(2,12, disable, low); } } return 0; }
void Spindle::on_module_loaded() { last_time = 0; last_edge = 0; current_rpm = 0; current_I_value = 0; current_pwm_value = 0; time_since_update = 0; spindle_on = true; if (!THEKERNEL->config->value(spindle_enable_checksum)->by_default(false)->as_bool()) { delete this; // Spindle control module is disabled return; } pulses_per_rev = THEKERNEL->config->value(spindle_pulses_per_rev_checksum)->by_default(1.0f)->as_number(); target_rpm = THEKERNEL->config->value(spindle_default_rpm_checksum)->by_default(5000.0f)->as_number(); control_P_term = THEKERNEL->config->value(spindle_control_P_checksum)->by_default(0.0001f)->as_number(); control_I_term = THEKERNEL->config->value(spindle_control_I_checksum)->by_default(0.0001f)->as_number(); control_D_term = THEKERNEL->config->value(spindle_control_D_checksum)->by_default(0.0001f)->as_number(); // Smoothing value is low pass filter time constant in seconds. float smoothing_time = THEKERNEL->config->value(spindle_control_smoothing_checksum)->by_default(0.1f)->as_number(); if (smoothing_time * UPDATE_FREQ < 1.0f) smoothing_decay = 1.0f; else smoothing_decay = 1.0f / (UPDATE_FREQ * smoothing_time); // Get the pin for hardware pwm { Pin *smoothie_pin = new Pin(); smoothie_pin->from_string(THEKERNEL->config->value(spindle_pwm_pin_checksum)->by_default("nc")->as_string()); spindle_pin = smoothie_pin->as_output()->hardware_pwm(); output_inverted = smoothie_pin->is_inverting(); delete smoothie_pin; } if (spindle_pin == NULL) { THEKERNEL->streams->printf("Error: Spindle PWM pin must be P2.0-2.5 or other PWM pin\n"); delete this; return; } int period = THEKERNEL->config->value(spindle_pwm_period_checksum)->by_default(1000)->as_int(); spindle_pin->period_us(period); spindle_pin->write(output_inverted ? 1 : 0); // Get the pin for interrupt { Pin *smoothie_pin = new Pin(); smoothie_pin->from_string(THEKERNEL->config->value(spindle_feedback_pin_checksum)->by_default("nc")->as_string()); smoothie_pin->as_input(); if (smoothie_pin->port_number == 0 || smoothie_pin->port_number == 2) { PinName pinname = port_pin((PortName)smoothie_pin->port_number, smoothie_pin->pin); feedback_pin = new mbed::InterruptIn(pinname); feedback_pin->rise(this, &Spindle::on_pin_rise); NVIC_SetPriority(EINT3_IRQn, 16); } else { THEKERNEL->streams->printf("Error: Spindle feedback pin has to be on P0 or P2.\n"); delete this; return; } delete smoothie_pin; } THEKERNEL->slow_ticker->attach(UPDATE_FREQ, this, &Spindle::on_update_speed); register_for_event(ON_GCODE_RECEIVED); }
void leds_init(void){ /*inicializo leds*/ port_pin(2,0, MD_PUP,init_out); port_pin(2,1, MD_PUP,init_out); port_pin(2,2, MD_PUP,init_out); port_pin(2,10,MD_PUP,init_out); port_pin(2,11,MD_PUP,init_out); port_pin(2,12,MD_PUP,init_out); /*los apago*/ port_pin(2,0, disable, low); port_pin(2,1, disable, low); port_pin(2,2, disable, low); port_pin(2,10,disable, low); port_pin(2,11,disable, low); port_pin(2,12,disable, low); }
main() { leds_init(); // delay(500); port_pin(4,10, SCU_MODE_INACT ,init_out); port_pin(4,9, SCU_MODE_INACT ,init_out); port_pin(0,0, SCU_MODE_INACT ,init_out); ////////////////////////////////////////////////////////////////////////////////////////////////////// // Board_SSP_Init(); //Chip_SSP_Init(LPC_SSP); // ssp_format.frameFormat = SSP_FRAMEFORMAT_SPI; //ssp_format.bits = SSP_DATA_BITS; //ssp_format.clockMode = SSP_CLOCK_CPHA0_CPOL0 ; // Chip_SSP_SetFormat(LPC_SSP,ssp_format.frameFormat, ssp_format.bits, ssp_format.clockMode); // Chip_SSP_SetMaster(LPC_SSP, SSP_MODE_TEST); // Chip_SSP_Enable(LPC_SSP); // Buffer_Init(); ////////////////////////////////////////////////////////////////////////////////////////////////////// Board_SSP_Init(); Board_SSP_config(SSP_DATA_BITS,SSP_CLOCK_CPHA0_CPOL0 ,800000 ); HD_reset (); Delay_ms (50) ;// delay 50ms lcd_initial_adafruitIIL9341();//lcd_initial();//////////Initial_ILI9340C(); Delay_ms (300); // Test to enter / exit sleep //LCD_Sleep_ILI9340C (); //Delay_ms (300); //LCD_ExitSleep_ILI9340C (); //Display a black screen LCD_TEST_SingleColor (0xFF,0xE0); led_on(LED1); delay(50); dsp_single_colour(0xF8,0x1F);//rosa led_on(LED2); delay(50); while(1) { // Disp_gradscal(); //»Ò½× delay(5); LCD_Sleep_ILI9340C(); delay(500); LCD_ExitSleep_ILI9340C(); //# define Red 0xf800 //LCD_TEST_SingleColor (Red); write_command(0x2C); dsp_single_colour(0x07,0xE0);//verde delay(50); dsp_single_colour(0xF8,0x00);//rojo delay(50); dsp_single_colour(0x07,0xE0);//verde dsp_single_colour(0x00,0x1F);//azul delay(50); } }