int _tmain(int argc, _TCHAR* argv[]) { get_info(); //configure CBUS for bitbang mode printf("Setting cbus1 to I/O mode..\n"); setCBUSbits(0x0A); // will use only cbus1 rxled, 0x0A set to Bitbang I/O mode FT_SetBitMode(ftHandle,0,0); // try resetting //Still having trouble response is always FAILED for (int x=0;x<10;x++) //blink rxlex 10x { writebits( 0x22); // 0010 0010 //Sleep(1000); readBits(); writebits( 0x20); // 0010 0000 //Sleep(1000); readBits(); } printf("Restoring Cbus1....\n"); setCBUSbits(old_cbus1_state); // restore it back printf("Press any key to exit.... \n"); while(!_kbhit()); return 0; }
void write(lzw_t *ctx, lzw_u code) { // increase the code size (number of bits) if needed if (ctx->max == (1 << ctx->codesize)) ctx->codesize++; writebits(ctx, code, ctx->codesize); }
/* PMC must be configured before clock-enable and de-reset of MC/EMC. */ static void sdram_configure_pmc(const struct sdram_params *param, struct tegra_pmc_regs *regs) { /* VDDP Select */ write32(®s->vddp_sel, param->PmcVddpSel); udelay(param->PmcVddpSelWait); /* Set DDR pad voltage */ writebits(param->PmcDdrPwr, ®s->ddr_pwr, PMC_DDR_PWR_VAL_MASK); /* Set package and DPD pad control */ writebits(param->PmcDdrCfg, ®s->ddr_cfg, (PMC_DDR_CFG_PKG_MASK | PMC_DDR_CFG_IF_MASK | PMC_DDR_CFG_XM0_RESET_TRI_MASK | PMC_DDR_CFG_XM0_RESET_DPDIO_MASK)); /* Turn on MEM IO Power */ writebits(param->PmcNoIoPower, ®s->no_iopower, (PMC_NO_IOPOWER_MEM_MASK | PMC_NO_IOPOWER_MEM_COMP_MASK)); write32(®s->reg_short, param->PmcRegShort); }
static void sdram_set_emc_timing(const struct sdram_params *param, struct tegra_emc_regs *regs) { /* Program EMC timing configuration */ write32(®s->cfg_2, param->EmcCfg2); write32(®s->cfg_pipe, param->EmcCfgPipe); write32(®s->dbg, param->EmcDbg); write32(®s->cmdq, param->EmcCmdQ); write32(®s->mc2emcq, param->EmcMc2EmcQ); write32(®s->mrs_wait_cnt, param->EmcMrsWaitCnt); write32(®s->mrs_wait_cnt2, param->EmcMrsWaitCnt2); write32(®s->fbio_cfg5, param->EmcFbioCfg5); write32(®s->rc, param->EmcRc); write32(®s->rfc, param->EmcRfc); write32(®s->rfc_slr, param->EmcRfcSlr); write32(®s->ras, param->EmcRas); write32(®s->rp, param->EmcRp); write32(®s->r2r, param->EmcR2r); write32(®s->w2w, param->EmcW2w); write32(®s->r2w, param->EmcR2w); write32(®s->w2r, param->EmcW2r); write32(®s->r2p, param->EmcR2p); write32(®s->w2p, param->EmcW2p); write32(®s->rd_rcd, param->EmcRdRcd); write32(®s->wr_rcd, param->EmcWrRcd); write32(®s->rrd, param->EmcRrd); write32(®s->rext, param->EmcRext); write32(®s->wext, param->EmcWext); write32(®s->wdv, param->EmcWdv); write32(®s->wdv_mask, param->EmcWdvMask); write32(®s->quse, param->EmcQUse); write32(®s->quse_width, param->EmcQuseWidth); write32(®s->ibdly, param->EmcIbdly); write32(®s->einput, param->EmcEInput); write32(®s->einput_duration, param->EmcEInputDuration); write32(®s->puterm_extra, param->EmcPutermExtra); write32(®s->puterm_width, param->EmcPutermWidth); write32(®s->puterm_adj, param->EmcPutermAdj); write32(®s->cdb_cntl_1, param->EmcCdbCntl1); write32(®s->cdb_cntl_2, param->EmcCdbCntl2); write32(®s->cdb_cntl_3, param->EmcCdbCntl3); write32(®s->qrst, param->EmcQRst); write32(®s->qsafe, param->EmcQSafe); write32(®s->rdv, param->EmcRdv); write32(®s->rdv_mask, param->EmcRdvMask); write32(®s->qpop, param->EmcQpop); write32(®s->ctt, param->EmcCtt); write32(®s->ctt_duration, param->EmcCttDuration); write32(®s->refresh, param->EmcRefresh); write32(®s->burst_refresh_num, param->EmcBurstRefreshNum); write32(®s->pre_refresh_req_cnt, param->EmcPreRefreshReqCnt); write32(®s->pdex2wr, param->EmcPdEx2Wr); write32(®s->pdex2rd, param->EmcPdEx2Rd); write32(®s->pchg2pden, param->EmcPChg2Pden); write32(®s->act2pden, param->EmcAct2Pden); write32(®s->ar2pden, param->EmcAr2Pden); write32(®s->rw2pden, param->EmcRw2Pden); write32(®s->txsr, param->EmcTxsr); write32(®s->txsrdll, param->EmcTxsrDll); write32(®s->tcke, param->EmcTcke); write32(®s->tckesr, param->EmcTckesr); write32(®s->tpd, param->EmcTpd); write32(®s->tfaw, param->EmcTfaw); write32(®s->trpab, param->EmcTrpab); write32(®s->tclkstable, param->EmcTClkStable); write32(®s->tclkstop, param->EmcTClkStop); write32(®s->trefbw, param->EmcTRefBw); write32(®s->odt_write, param->EmcOdtWrite); write32(®s->odt_read, param->EmcOdtRead); write32(®s->fbio_cfg6, param->EmcFbioCfg6); write32(®s->cfg_dig_dll, param->EmcCfgDigDll); write32(®s->cfg_dig_dll_period, param->EmcCfgDigDllPeriod); /* Don't write bit 1: addr swizzle lock bit. Written at end of sequence. */ write32(®s->fbio_spare, param->EmcFbioSpare & 0xfffffffd); write32(®s->cfg_rsv, param->EmcCfgRsv); write32(®s->dll_xform_dqs0, param->EmcDllXformDqs0); write32(®s->dll_xform_dqs1, param->EmcDllXformDqs1); write32(®s->dll_xform_dqs2, param->EmcDllXformDqs2); write32(®s->dll_xform_dqs3, param->EmcDllXformDqs3); write32(®s->dll_xform_dqs4, param->EmcDllXformDqs4); write32(®s->dll_xform_dqs5, param->EmcDllXformDqs5); write32(®s->dll_xform_dqs6, param->EmcDllXformDqs6); write32(®s->dll_xform_dqs7, param->EmcDllXformDqs7); write32(®s->dll_xform_dqs8, param->EmcDllXformDqs8); write32(®s->dll_xform_dqs9, param->EmcDllXformDqs9); write32(®s->dll_xform_dqs10, param->EmcDllXformDqs10); write32(®s->dll_xform_dqs11, param->EmcDllXformDqs11); write32(®s->dll_xform_dqs12, param->EmcDllXformDqs12); write32(®s->dll_xform_dqs13, param->EmcDllXformDqs13); write32(®s->dll_xform_dqs14, param->EmcDllXformDqs14); write32(®s->dll_xform_dqs15, param->EmcDllXformDqs15); write32(®s->dll_xform_quse0, param->EmcDllXformQUse0); write32(®s->dll_xform_quse1, param->EmcDllXformQUse1); write32(®s->dll_xform_quse2, param->EmcDllXformQUse2); write32(®s->dll_xform_quse3, param->EmcDllXformQUse3); write32(®s->dll_xform_quse4, param->EmcDllXformQUse4); write32(®s->dll_xform_quse5, param->EmcDllXformQUse5); write32(®s->dll_xform_quse6, param->EmcDllXformQUse6); write32(®s->dll_xform_quse7, param->EmcDllXformQUse7); write32(®s->dll_xform_quse8, param->EmcDllXformQUse8); write32(®s->dll_xform_quse9, param->EmcDllXformQUse9); write32(®s->dll_xform_quse10, param->EmcDllXformQUse10); write32(®s->dll_xform_quse11, param->EmcDllXformQUse11); write32(®s->dll_xform_quse12, param->EmcDllXformQUse12); write32(®s->dll_xform_quse13, param->EmcDllXformQUse13); write32(®s->dll_xform_quse14, param->EmcDllXformQUse14); write32(®s->dll_xform_quse15, param->EmcDllXformQUse15); write32(®s->dll_xform_dq0, param->EmcDllXformDq0); write32(®s->dll_xform_dq1, param->EmcDllXformDq1); write32(®s->dll_xform_dq2, param->EmcDllXformDq2); write32(®s->dll_xform_dq3, param->EmcDllXformDq3); write32(®s->dll_xform_dq4, param->EmcDllXformDq4); write32(®s->dll_xform_dq5, param->EmcDllXformDq5); write32(®s->dll_xform_dq6, param->EmcDllXformDq6); write32(®s->dll_xform_dq7, param->EmcDllXformDq7); write32(®s->dll_xform_addr0, param->EmcDllXformAddr0); write32(®s->dll_xform_addr1, param->EmcDllXformAddr1); write32(®s->dll_xform_addr2, param->EmcDllXformAddr2); write32(®s->dll_xform_addr3, param->EmcDllXformAddr3); write32(®s->dll_xform_addr4, param->EmcDllXformAddr4); write32(®s->dll_xform_addr5, param->EmcDllXformAddr5); write32(®s->acpd_control, param->EmcAcpdControl); write32(®s->dsr_vttgen_drv, param->EmcDsrVttgenDrv); write32(®s->txdsrvttgen, param->EmcTxdsrvttgen); write32(®s->bgbias_ctl0, param->EmcBgbiasCtl0); /* * Set pipe bypass enable bits before sending any DRAM commands. * Note other bits in EMC_CFG must be set AFTER REFCTRL is configured. */ writebits(param->EmcCfg, ®s->cfg, (EMC_CFG_EMC2PMACRO_CFG_BYPASS_ADDRPIPE_MASK | EMC_CFG_EMC2PMACRO_CFG_BYPASS_DATAPIPE1_MASK | EMC_CFG_EMC2PMACRO_CFG_BYPASS_DATAPIPE2_MASK)); }
void bmp_write_image(char *filename, struct image_t *bmp) { unsigned int headers[13]; FILE *outfile = NULL; unsigned width = bmp->bit_width; unsigned height = bmp->bit_height; unsigned int paddedsize; int n; unsigned r, g, b; uint8_t *compressed = NULL; unsigned compressed_len = 0; compressed = bmp_make_compressed(bmp, &compressed_len); assert(compressed); // Header + color table (RGB and Alpha) paddedsize = 54 + (256 * 4); headers[0] = paddedsize + compressed_len; // bfSize (whole file size) headers[1] = 0; // bfReserved (both) headers[2] = paddedsize; // bfOffbits headers[3] = 40; // biSize headers[4] = width; // biWidth headers[5] = height; // biHeight headers[6] = 0x00080001; // biPlanes and biBitCounts are fixed headers[7] = 1; // biCompression - 8 bit RLE headers[8] = compressed_len; // biSizeImage headers[9] = 0; // biXPelsPerMeter headers[10] = 0; // biYPelsPerMeter headers[11] = 256; // biClrUsed headers[12] = 256; // biClrImportant outfile = fopen(filename, "wb"); // // Headers begin... // Write out 1 character at a time to avoid endian issues. // fprintf(outfile, "BM"); for (n = 0; n < (sizeof(headers) / sizeof(headers[0])); n++) { fprintf(outfile, "%c", headers[n] & 0x000000FF); fprintf(outfile, "%c", (headers[n] & 0x0000FF00) >> 8); fprintf(outfile, "%c", (headers[n] & 0x00FF0000) >> 16); fprintf(outfile, "%c", (headers[n] & 0xFF000000) >> 24); } // Now do the color table for (n = 0; n < 256; n++) { color_to_rgb(n, &r, &g, &b); fprintf(outfile, "%c", b); fprintf(outfile, "%c", g); fprintf(outfile, "%c", r); fprintf(outfile, "%c", 0); } // And blather out the compressed table writebits(outfile, compressed, compressed_len); fclose(outfile); free(compressed); compressed = NULL; return; }
// write a Differential Data Stream void writeDDSfile(const char *filename,unsigned char *data,size_t bytes,unsigned int skip,unsigned int strip,int nofree) { int version=1; unsigned char *ptr1,*ptr2; int pre1,pre2, act1,act2, tmp1,tmp2; unsigned int cnt,cnt1,cnt2; int bits,bits1,bits2; if (bytes<1) ERRORMSG(); if (bytes>DDS_INTERLEAVE) version=2; if (skip<1 || skip>4) skip=1; if (strip<1 || strip>65536) strip=1; if ((DDS_file=fopen(filename,"wb"))==NULL) ERRORMSG(); fprintf(DDS_file,"%s",(version==1)?DDS_ID:DDS_ID2); deinterleave(data,bytes,skip,DDS_INTERLEAVE); initbuffer(); writebits(DDS_file,skip-1,2); writebits(DDS_file,strip++-1,16); ptr1=ptr2=data; pre1=pre2=0; cnt=cnt1=cnt2=0; bits=bits1=bits2=0; while (cnt++<bytes) { tmp1=*ptr1++; if (cnt<=strip) act1=tmp1-pre1; else act1=tmp1-pre1-*(ptr1-strip)+*(ptr1-strip-1); pre1=tmp1; while (act1<-128) act1+=256; while (act1>127) act1-=256; if (act1<=0) for (bits=0; (1<<bits)/2<-act1; bits++) ; else for (bits=0; (1<<bits)/2<=act1; bits++) ; bits=DDS_decode(DDS_code(bits)); if (cnt1==0) { cnt1++; bits1=bits; continue; } if (cnt1<(1<<DDS_RL)-1 && bits==bits1) { cnt1++; continue; } if (cnt1+cnt2<(1<<DDS_RL) && (cnt1+cnt2)*max(bits1,bits2)<cnt1*bits1+cnt2*bits2+DDS_RL+3) { cnt2+=cnt1; if (bits1>bits2) bits2=bits1; } else { writebits(DDS_file,cnt2,DDS_RL); writebits(DDS_file,DDS_code(bits2),3); while (cnt2-->0) { tmp2=*ptr2++; if (ptr2-strip<=data) act2=tmp2-pre2; else act2=tmp2-pre2-*(ptr2-strip)+*(ptr2-strip-1); pre2=tmp2; while (act2<-128) act2+=256; while (act2>127) act2-=256; writebits(DDS_file,act2+(1<<bits2)/2,bits2); } cnt2=cnt1; bits2=bits1; } cnt1=1; bits1=bits; } if (cnt1+cnt2<(1<<DDS_RL) && (cnt1+cnt2)*max(bits1,bits2)<cnt1*bits1+cnt2*bits2+DDS_RL+3) { cnt2+=cnt1; if (bits1>bits2) bits2=bits1; } else { writebits(DDS_file,cnt2,DDS_RL); writebits(DDS_file,DDS_code(bits2),3); while (cnt2-->0) { tmp2=*ptr2++; if (ptr2-strip<=data) act2=tmp2-pre2; else act2=tmp2-pre2-*(ptr2-strip)+*(ptr2-strip-1); pre2=tmp2; while (act2<-128) act2+=256; while (act2>127) act2-=256; writebits(DDS_file,act2+(1<<bits2)/2,bits2); } cnt2=cnt1; bits2=bits1; } if (cnt2!=0) { writebits(DDS_file,cnt2,DDS_RL); writebits(DDS_file,DDS_code(bits2),3); while (cnt2-->0) { tmp2=*ptr2++; if (ptr2-strip<=data) act2=tmp2-pre2; else act2=tmp2-pre2-*(ptr2-strip)+*(ptr2-strip-1); pre2=tmp2; while (act2<-128) act2+=256; while (act2>127) act2-=256; writebits(DDS_file,act2+(1<<bits2)/2,bits2); } } flushbits(DDS_file); fclose(DDS_file); if (nofree==0) free(data); else interleave(data,bytes,skip,DDS_INTERLEAVE); }
void LiquidCrystalDogC::begin(uint8_t cols, uint8_t rows, uint8_t mode) { uint8_t bias; _numcols = cols; _numrows = rows; if (rows > 1) { _displayfunction |= LCD_2LINE; } else { _displayfunction &= ~LCD_2LINE; } if (mode & LCD_DOG33V) { _dogpower = LCD_DOGBOOSTON; bias = LCD_DOGBIASLOW; } else { _dogpower = LCD_DOGBOOSTOFF; bias = LCD_DOGBIASHIGH; } // for some 1 line displays you can select a 10 pixel high font if ((mode & LCD_5x10DOTS) && (rows == 1)) { _displayfunction |= LCD_5x10DOTS; } else { _displayfunction &= ~LCD_5x10DOTS; } // SEE PAGE 45/46 FOR INITIALIZATION SPECIFICATION! // according to datasheet, we need at least 40ms after power rises above 2.7V // before sending commands. Arduino can turn on way befer 4.5V so we'll wait 50 delayMicroseconds(50000); //we don't know which mode the LCD is in. maybe in the middle of a 4 bit mode transfer. force 8 bit mode. for(int i = 0; i < 3; i++) { // we start in 8bit mode, try to set 8 bit mode writebits(LCD_FUNCTIONSET | LCD_8BITMODE, LOW); delayMicroseconds(5000); // wait min 4.1ms } //put the LCD into 4 bit or 8 bit mode if (! (_displayfunction & LCD_8BITMODE)) { // finally, set to 4-bit interface writebits(LCD_FUNCTIONSET, LOW); delayMicroseconds(100); // commands and writes need > 37us to settle } if (mode & LCD_TYPEDOG) { _displaytype = LCD_TYPEDOG; command(LCD_FUNCTIONSET | _displayfunction | LCD_DOGIS1); command(LCD_DOGBIAS | bias | (rows == 3)); // bias command(LCD_DOGFOLLOW | 0x02); // follower control contrast(36, 1); } else { _displaytype = LCD_TYPESTD; } // finally, set # rows, font size, etc. command(LCD_FUNCTIONSET | _displayfunction); delay(5); // turn the display on with no cursor or blinking default _displaycontrol = LCD_DISPLAYON | LCD_CURSOROFF | LCD_BLINKOFF; display(); // clear it off clear(); // Initialize to default text direction (for romance languages) _displaymode = LCD_ENTRYLEFT | LCD_ENTRYSHIFTDISABLE; // set the entry mode command(LCD_ENTRYMODESET | _displaymode); }