/*=====================================================
 * @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;
}
Beispiel #2
0
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
Beispiel #3
0
//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;
}