Exemplo n.º 1
0
static SQInteger erase_wait(HSQUIRRELVM v)
{
	struct program_config *d;
	SQRESULT r =  qr_userpointer_get(v, (SQUserPointer) &d);
	if(SQ_FAILED(r)){
		return r;
	}
	if(0){
		long timer_wait = erase_timer_get(d->handle, &d->cpu);
		long timer_ppu = erase_timer_get(d->handle, &d->ppu);
		if(timer_wait < timer_ppu){
			timer_wait = timer_ppu;
		}
		wait_msec(timer_wait);
	}else{
		uint8_t s[2];
		do{
			wait_msec(2);
			d->control->flash_status(d->handle, s);
		//本来の意図からではここの条件式は && ではなく || だが、先に erase が終わったデバイスが動かせるので残しておく
		}while((s[0] != KAZZO_TASK_FLASH_IDLE) && (s[1] != KAZZO_TASK_FLASH_IDLE));
	}
	return 0;
}
Exemplo n.º 2
0
errval_t ti_twl6030_set_vmmc_vsel(int millis)
{
    TWL_DEBUG("ti_twl6030_vmmc_vsel\n");
    //ti_twl6030_mmcctrl_vmmc_auto_off_wrf(&twl, 0x0);
    ti_twl6030_mmcctrl_sw_fc_wrf(&twl, 0x1);

    ti_twl6030_vmmc_off();
    wait_msec(10);

    ti_twl6030_vsel_t vsel = millis_to_vsel(millis);
    ti_twl6030_vmmc_cfg_voltage_vsel_wrf(&twl, vsel);

    ti_twl6030_vmmc_on();
    //ti_twl6030_mmcctrl_vmmc_auto_off_wrf(&twl, 0x0);

    ti_twl6030_vmmc_pr();


    return SYS_ERR_OK;
}
Exemplo n.º 3
0
static SQInteger program_main(HSQUIRRELVM v)
{
	if(sq_gettop(v) != (1 + 3)){ //roottable, userpointer, co_cpu, co_ppu
		return sq_throwerror(v, wgT("argument number error"));
	}
	struct program_config *d;
	SQRESULT r =  qr_userpointer_get(v, (SQUserPointer) &d);
	if(SQ_FAILED(r)){
		return r;
	}
	HSQUIRRELVM co_cpu, co_ppu;
	if(SQ_FAILED(sq_getthread(v, 3, &co_cpu))){
		return sq_throwerror(v, wgT("thread error"));
	}
	if(SQ_FAILED(sq_getthread(v, 4, &co_ppu))){
		return sq_throwerror(v, wgT("thread error"));
	}
	SQInteger state_cpu = sq_getvmstate(co_cpu);
	SQInteger state_ppu = sq_getvmstate(co_ppu);
	const long sleepms = d->compare == true ? 6 : 2; //W29C040 で compare をすると、error が出るので出ない値に調整 (やっつけ対応)
	
	while((state_cpu != SQ_VMSTATE_IDLE) || (state_ppu != SQ_VMSTATE_IDLE)){
		uint8_t s[2];
		wait_msec(sleepms);
		d->control->flash_status(d->handle, s);
		if(state_cpu != SQ_VMSTATE_IDLE && s[0] == KAZZO_TASK_FLASH_IDLE){
			if(program_memoryarea(co_cpu, d->handle, &d->cpu, d->compare, &state_cpu, &d->log) == false){
				//sq_pushbool(v, SQFalse);
				return 0;
			}
		}
		if(state_ppu != SQ_VMSTATE_IDLE && s[1] == KAZZO_TASK_FLASH_IDLE){
			if(program_memoryarea(co_ppu, d->handle, &d->ppu, d->compare, &state_ppu, &d->log) == false){
				//sq_pushbool(v, SQFalse);
				return 0;
			}
		}
	}
	//sq_pushbool(v, SQTrue);
	return 0;
}
Exemplo n.º 4
0
void main() {
    byte SERVO_0 = 0, SERVO_1 = 0;
    byte MOTOR_L = 0, MOTOR_R = 0, MOTOR_V = 0;
    short BUCKET_L = 0, BUCKET_R = 0, BUCKET_V = 0;
    byte T = 0;
    
    init();
    
    while (1) {
        byte cmd = serial_rx();
        byte power, s0, s1;
        
        switch (cmd) {
            case CMD_SET_MOTORS :
                MOTOR_L = serial_rx();
                MOTOR_R = serial_rx();
                MOTOR_V = serial_rx();
                
                s0 = serial_rx();
                s1 = serial_rx();
                
                set_servo(1 << 0, SERVO_0);
                set_servo(1 << 1, SERVO_1);
                
                SERVO_0 = s0;
                SERVO_1 = s1;
                
                // read temperature data from RE2 (ANS7)
                serial_tx(read_analog(7));
                break;
        }
        
        BUCKET_L += MOTOR_L - 127;
        BUCKET_R += MOTOR_R - 127;
        BUCKET_V += MOTOR_V - 127;
        
        power = 0;
        
        if (BUCKET_L >= 127) {
            BUCKET_L -= 127;
            power = power | (1 << 0);
        }
        else if (BUCKET_L < -127) {
            BUCKET_L += 127;
            power = power | (1 << 1);
        }
        
        if (BUCKET_R >= 127) {
            BUCKET_R -= 127;
            power = power | (1 << 2);
        }
        else if (BUCKET_R < -127) {
            BUCKET_R += 127;
            power = power | (1 << 3);
        }
        
        if (BUCKET_V >= 127) {
            BUCKET_V -= 127;
            power = power | (1 << 4);
        }
        else if (BUCKET_V < -127) {
            BUCKET_V += 127;
            power = power | (1 << 5);
        }
        
        PORTA = power;
        wait_msec(4);
    }
}