int i2c_setup(const char *sclpin, const char *sdapin) { if (set_pinmux(sclpin, "i2c") < 0) { printf("set_pinmux(%s) fail", sclpin); return -1; } if (set_pinmux(sdapin, "i2c") < 0) { printf("set_pinmux(%s) fail", sdapin); return -1; } return 0; }
static void pinmux_init(void) { int i; for (i = 0; i < ARRAY_SIZE(board_pinmux); i++) set_pinmux(board_pinmux[i]); }
int board_init(void) { /* arch number of Freescale STMP 378x development board */ gd->bd->bi_arch_number = MACH_TYPE_STMP378X; /* adress of boot parameters */ gd->bd->bi_boot_params = LINUX_BOOT_PARAM_ADDR; set_clocks(); set_pinmux(); /* Configure SPI on SSP1 or SSP2 */ spi_init(); return 0; }
int main(void) { CCAN_MSG_OBJ_T send_obj; SystemCoreClockUpdate(); Board_Init(); set_pinmux(); DEBUGOUT(WelcomeMenu); /* Set CCAN peripheral clock under 100Mhz for working stable */ Chip_Clock_SetBaseClock(CLK_BASE_APB3, CLKIN_IDIVC, true, false); Chip_CCAN_Init(LPC_C_CAN0); Chip_CCAN_SetBitRate(LPC_C_CAN0, 500000); Chip_CCAN_EnableInt(LPC_C_CAN0, (CCAN_CTRL_IE | CCAN_CTRL_SIE | CCAN_CTRL_EIE)); send_obj.id = CCAN_TX_MSG_ID; send_obj.dlc = 4; send_obj.data[0] = 'A'; send_obj.data[1] = 'B'; send_obj.data[2] = 'C'; send_obj.data[3] = 'D'; Chip_CCAN_Send(LPC_C_CAN0, CCAN_MSG_IF1, false, &send_obj); Chip_CCAN_ClearStatus(LPC_C_CAN0, CCAN_STAT_TXOK); send_obj.id = CCAN_TX_MSG_REMOTE_ID; send_obj.data[0] = 'E'; send_obj.data[1] = 'F'; send_obj.data[2] = 'G'; send_obj.data[3] = 'H'; Chip_CCAN_Send(LPC_C_CAN0, CCAN_MSG_IF1, true, &send_obj); Chip_CCAN_ClearStatus(LPC_C_CAN0, CCAN_STAT_TXOK); Chip_CCAN_AddReceiveID(LPC_C_CAN0, CCAN_MSG_IF1, CCAN_RX_MSG_ID); NVIC_EnableIRQ(C_CAN0_IRQn); while (1) {} }
int pwm_start(const char *pinName, int exportNumber, char *pwmDir, float duty, float freq, int polarity, PwmChannel_t *pwm) { char pwm_control_path[PATHLEN]; char pwm_path[PATHLEN]; //pwm channel control folder char export[2]; int fd; strncpy(pwm->key, pinName, KEYLEN); if (set_pinmux(pinName, "pwm") < 0) { return -1; } //export pwm channel if ((fd = open("/sys/class/pwm/export", O_WRONLY)) < 0) { LogError("pwm open(/sys/class/pwm/export) fail (%s)\n", strerror(errno)); return -1; } snprintf(export, 2, "%i", exportNumber); write(fd,export,1); close(fd); snprintf(pwm_path, sizeof(pwm_path), "/sys/class/pwm/%s", pwmDir); //create the path for period control snprintf(pwm_control_path, sizeof(pwm_control_path), "%s/period_ns", pwm_path); if ((pwm->period_fd = open(pwm_control_path, O_WRONLY)) < 0) { LogError("pwm open(%s) fail (%s)\n", pwm_control_path, strerror(errno)); return -1; } snprintf(pwm_control_path, sizeof(pwm_control_path), "%s/duty_ns", pwm_path); if ((pwm->duty_fd = open(pwm_control_path, O_WRONLY)) < 0) { //error, close already opened period_fd. LogError("pwm open(%s) fail (%s)\n", pwm_control_path, strerror(errno)); close(pwm->period_fd); return -1; } snprintf(pwm_control_path, sizeof(pwm_control_path), "%s/polarity", pwm_path); if ((pwm->polarity_fd = open(pwm_control_path, O_WRONLY)) < 0) { LogError("pwm open(%s) fail (%s)\n", pwm_control_path, strerror(errno)); //error, close already opened period_fd and duty_fd. close(pwm->period_fd); close(pwm->duty_fd); return -1; } snprintf(pwm_control_path, sizeof(pwm_control_path), "%s/run", pwm_path); if ((pwm->run_fd = open(pwm_control_path, O_WRONLY)) < 0) { LogError("pwm open(%s) fail (%s)\n", pwm_control_path, strerror(errno)); //error, close already opened period_fd and duty_fd. close(pwm->polarity_fd); close(pwm->period_fd); close(pwm->duty_fd); return -1; } pwm_set_frequency(pwm, freq); pwm_set_polarity(pwm, polarity); pwm_set_duty_cycle(pwm, duty); pwm_set_run(pwm, 1); return 0; }