/*===================================================== * @breif * AD変換する関数 * @param * なし * @return * AD変換した電圧値(V) * @note * AD変換する関数 *===================================================*/ double get_adcon(void) { /* A/D con Range */ const unsigned int range = 0x3ff; /* A/D value */ int ad_value = 0b0000000000; double voltage_value; /* variables to recive binary from Register */ long my_adres_h; long my_adres_l; /* A/D Con Enable */ ADCON0 = 0b10000001; ADCON0bits.GO_DONE = 1; /* waiting for finish of A/D */ while(ADCON0bits.GO_DONE){;} /* get binary from Register */ my_adres_h = ADRESH; my_adres_l = ADRESL; ad_value = bit_shift(my_adres_h, my_adres_l); /* calculate value of voltage */ voltage_value = ad_value * 5.0 / range; return voltage_value; }
offset_t compute_sectors_from_size(dev_ent_t *un, offset_t size) { offset_t sector_cnt = size; if (un->sector_size != 1024) { /* size is always in 1024, so calc shift required from there */ int bshift = 10 - bit_shift(un->sector_size); if (bshift < 0) sector_cnt = size >> (abs(bshift)); else
//returning first valid physical address char * create_phyadr(int shift, int offset_size, int size,char v_adr[size]){ if(v_adr < 1 || size < 1 || offset_size < 0){ return -1; } int shift_diff; //shift = 12; //int offset_size = 12; // 12 bit 3 byte example char * first_addr; if((first_addr = access_bits(offset_size,size,v_adr))==0){ return (-2); } shift_diff = shift - (size*4 - offset_size); sprintf(first_addr, "%x",bit_shift(strtol(first_addr,NULL,16),shift_diff)); return first_addr; }