亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? vs1001.c

?? yampp mp3 reference
?? C
字號:

/*
  Copyright (C) 2001 Jesper Hansen <jesperh@telia.com>.

  This file is part of the yampp system.

  This program is free software; you can redistribute it and/or
  modify it under the terms of the GNU General Public License
  as published by the Free Software Foundation; either version 2
  of the License, or (at your option) any later version.

  This program is distributed in the hope that it will be useful,
  but WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  GNU General Public License for more details.

  You should have received a copy of the GNU General Public License
  along with this program; if not, write to the Free Software Foundation, 
  Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
*/

#include <io.h>
#include <progmem.h>
#include "types.h"
#include "delay.h"
#include "vs1001.h"
#include "uart.h"

//
// VS1001 commands
//
#define VS1001_READ		0x03
#define VS1001_WRITE	0x02


//
// read one or more word(s) from the VS1001 Control registers
//
void vs1001_read(u08 address, u16 count, u16 *pData)
{
	cbi( MP3_PORT, MP3_PIN);	// xCS lo

	outp(VS1001_READ, SPDR);
	loop_until_bit_is_set(SPSR, SPIF);    

	outp(address, SPDR);
	loop_until_bit_is_set(SPSR, SPIF);    

	while (count--)
	{
		outp(0x00, SPDR);
		loop_until_bit_is_set(SPSR, SPIF);    
		*pData = ((u16)inp(SPDR)) << 8;

		outp(0x00, SPDR);
		loop_until_bit_is_set(SPSR, SPIF);    
		*pData |= inp(SPDR);

		pData++;
	}

	sbi( MP3_PORT, MP3_PIN);	// xCS hi

	//this is absolutely neccessary!
	delay(5); //wait 5 microseconds after sending data to control port
}

//
// write one or more word(s) to the VS1001 Control registers
//
void vs1001_write(u08 address, u16 count, u16 *pData)
{
	cbi( MP3_PORT, MP3_PIN);	// xCS lo

	outp(VS1001_WRITE, SPDR);
	loop_until_bit_is_set(SPSR, SPIF);    

	outp(address, SPDR);
	loop_until_bit_is_set(SPSR, SPIF);    

	while (count--)
	{
		outp((u08)((*pData) >> 8), SPDR);
		loop_until_bit_is_set(SPSR, SPIF);    
		
		outp((u08)(*pData), SPDR);
		loop_until_bit_is_set(SPSR, SPIF);    
	
		pData++;
	}

	sbi( MP3_PORT, MP3_PIN);	// xCS hi

	//this is absolutely neccessary!
	delay(6); //wait 5 microseconds after sending data to control port
}


/****************************************************************************
**
** MPEG Data Stream
**
****************************************************************************/

//
// send a byte to the VS1001 MPEG stream
//
inline void vs1001_send_data(u08 b)
{
	
	sbi( BSYNC_PORT,   BSYNC_PIN ); 	// byte sync hi

	outp(b, SPDR);		// send data

	asm volatile("nop");
	asm volatile("nop");
	asm volatile("nop");
	
	cbi( BSYNC_PORT,   BSYNC_PIN ); 	// byte sync lo

	// wait for data to be sent
	loop_until_bit_is_set(SPSR, SPIF);    

}


//
// send a burst of 32 data bytes to the VS1001 MPEG stream
//
inline void vs1001_send_32(u08 *p)
{
	u16 j;

	sbi( BSYNC_PORT,   BSYNC_PIN ); 		// byte sync hi
	for (j=0;j<32;j++)
	{
//		sbi( BSYNC_PORT,   BSYNC_PIN ); 	// byte sync hi
		outp(*p++, SPDR);		// send data
//		asm volatile("nop");
//		asm volatile("nop");
//		asm volatile("nop");
//		cbi( BSYNC_PORT,   BSYNC_PIN ); 	// byte sync lo

		// wait for data to be sent
		loop_until_bit_is_set(SPSR, SPIF);    
	}
	cbi( BSYNC_PORT,   BSYNC_PIN ); 		// byte sync lo
}



/****************************************************************************
**
** Init and helper functions
**
****************************************************************************/


// setup I/O pins and directions for
// communicating with the VS1001
void vs1001_init_io(void)
{
	u08 dummy;
	// setup BSYNC
	sbi( BSYNC_PORT-1, BSYNC_PIN ); 	// pin is output for BSYNC
	cbi( BSYNC_PORT,   BSYNC_PIN ); 	// output low

	// set the MP3/ChipSelect pin hi
	sbi( MP3_PORT-1, MP3_PIN); 			// pin output for xCS
	sbi( MP3_PORT,   MP3_PIN); 			// output hi (select MP3)

	// set the /Reset pin hi
//	sbi( RESET_PORT-1, RESET_PIN); 		// pin output 
//	sbi( RESET_PORT,   RESET_PIN); 		// output hi

	// setup serial data interface :
	// clock = f/4
	// select clock phase positive going in middle of data
	// master mode
	// enable SPI

	// setup serial data I/O pins

	sbi(DDRB, PB5);	// set MOSI a output
	sbi(DDRB, PB4);	// SS must be output for Master mode to work

	sbi(DDRB, PB7);	// set SCK as output
	cbi(PORTB, PB7);// set SCK lo

	outp((1<<MSTR)|(1<<SPE) /*| (1<<SPR0)*/, SPCR );	// 2 MHz clock

	dummy = inp(SPSR);	// clear status
}


// setup the VS1001 chip for decoding
void vs1001_init_chip(void)
{

	//do a software reset

	delay(3000);
	vs1001_reset();

	// ande flush the buffers
	delay(3000);
	vs1001_nulls(32);
}

// reset the VS1001
void vs1001_reset(void)
{
	u16 buf[2];

	delayms(200);		// wait 200 mS
	
	// set SW reset bit	
	buf[0] = 0x04;
	vs1001_write(0,1,buf);	// set bit 2

	delayms(2);		// wait 2 mS

	loop_until_bit_is_set(DREQ_PORT - 2, DREQ_PIN); //wait for DREQ

	// set CLOCKF to compensate for a 24 MHz x-tal
	buf[0] = 12000;
	vs1001_write(3,1,buf);	

	vs1001_nulls(1024);
	    
}


//
// send a number of zero's to the VS1001
//
void vs1001_nulls(u16 nNulls)
{
	while (nNulls--)
		vs1001_send_data(0);
}


//
// Set the VS1001 volume
//
void vs_1001_setvolume(u08 left, u08 right)
{
	u16 buf[2];

	buf[0] = (((u16)left) << 8) | (u16)right;

	vs1001_write(11, 1, buf);
}



?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久久天堂av| 久久丁香综合五月国产三级网站| 国产成人自拍在线| 久久久国产午夜精品| 国产精品综合网| 亚洲国产精品高清| 91美女片黄在线观看| 一区二区激情小说| 制服丝袜在线91| 国产一区二区三区精品欧美日韩一区二区三区| 精品国产凹凸成av人网站| 国产河南妇女毛片精品久久久| 欧美激情综合网| 色噜噜久久综合| 日本中文字幕一区二区视频 | 不卡电影一区二区三区| 亚洲色图丝袜美腿| 欧美日韩中文国产| 国产在线视频一区二区三区| 亚洲欧洲成人精品av97| 欧美午夜理伦三级在线观看| 精品一区二区三区av| 国产精品欧美一区喷水| 欧美浪妇xxxx高跟鞋交| 国产精品一区二区无线| 一区二区三区欧美视频| 亚洲精品一区二区在线观看| 色哟哟一区二区在线观看| 日产国产高清一区二区三区 | 日韩毛片精品高清免费| 欧美精品一二三区| 国产ts人妖一区二区| 亚洲一区国产视频| 久久久久久久久久久黄色| 91啦中文在线观看| 国产在线精品免费| 一级做a爱片久久| 久久精品一区二区三区不卡牛牛| 日本精品免费观看高清观看| 国产美女在线精品| 图片区小说区区亚洲影院| 国产精品色呦呦| 日韩欧美中文字幕制服| 一本大道久久精品懂色aⅴ| 精品夜夜嗨av一区二区三区| 亚洲视频一区在线观看| 久久亚洲影视婷婷| 91精品国产乱码久久蜜臀| 91丨九色丨国产丨porny| 精品制服美女丁香| 午夜欧美一区二区三区在线播放| 国产精品电影一区二区三区| 日韩美女天天操| 欧美日韩亚洲综合在线 | 三级影片在线观看欧美日韩一区二区 | 亚洲精品免费在线观看| 精品国产乱码久久久久久久久| 色综合久久久久| 成人国产在线观看| 国产在线视频一区二区三区| 裸体健美xxxx欧美裸体表演| 一区二区激情视频| 亚洲美女免费在线| 国产精品久久福利| 欧美激情艳妇裸体舞| 久久精品综合网| 国产午夜精品美女毛片视频| 欧美大片拔萝卜| 欧美一区二区三区视频在线 | 91丨porny丨在线| 高清国产午夜精品久久久久久| 国产综合久久久久影院| 激情综合网激情| 蜜臀a∨国产成人精品| 青青草97国产精品免费观看无弹窗版| 亚洲va欧美va国产va天堂影院| 夜夜操天天操亚洲| 亚洲高清三级视频| 亚洲一区二区欧美| 亚洲成av人片一区二区三区| 亚洲成a人v欧美综合天堂下载| 性欧美疯狂xxxxbbbb| 天天操天天色综合| 美国欧美日韩国产在线播放| 久久国产三级精品| 国产一区 二区| 99视频精品在线| 欧美在线视频不卡| 欧美日韩国产综合一区二区三区| 欧美久久婷婷综合色| 日韩视频免费观看高清完整版| 精品国内片67194| 久久久久久久精| 欧美日韩高清不卡| 国产午夜精品久久| 国产精品一区二区视频| 91黄色小视频| 欧美日韩国产123区| 久久久久久电影| 国产校园另类小说区| 精品国产一区二区三区不卡 | 国产精品天干天干在线综合| 国产亚洲欧美日韩在线一区| 成人性色生活片免费看爆迷你毛片| 粉嫩av亚洲一区二区图片| 成人精品视频一区二区三区尤物| 91看片淫黄大片一级在线观看| 欧洲精品一区二区| 日韩欧美精品三级| 亚洲欧洲日韩一区二区三区| 亚洲永久精品大片| 久久疯狂做爰流白浆xx| 99久久精品国产精品久久| 欧美唯美清纯偷拍| 久久免费视频一区| 一区二区三区在线观看欧美| 六月婷婷色综合| 91色九色蝌蚪| 欧美不卡激情三级在线观看| ...av二区三区久久精品| 丝袜国产日韩另类美女| 懂色av一区二区夜夜嗨| 欧美视频一区二| 久久久综合网站| 亚洲午夜久久久久久久久久久| 久草这里只有精品视频| 色香蕉久久蜜桃| 久久久午夜精品| 日韩成人精品在线| k8久久久一区二区三区| 日韩欧美激情四射| 一区二区三区国产| 国产盗摄视频一区二区三区| 欧美肥妇毛茸茸| 国产精品第一页第二页第三页| 久久精品国产亚洲一区二区三区| 99久久精品国产一区二区三区| 欧美videos中文字幕| 亚洲影视在线观看| 99视频一区二区三区| 久久久91精品国产一区二区精品| 天堂久久一区二区三区| 91美女福利视频| 国产精品女主播在线观看| 美女视频黄频大全不卡视频在线播放| 一本一本久久a久久精品综合麻豆| 久久久一区二区三区捆绑**| 日本不卡123| 欧美三级三级三级| 亚洲精品福利视频网站| 波多野结衣在线一区| 久久精品一区二区三区av| 激情综合色综合久久| 欧美福利视频导航| 亚洲午夜电影网| 在线观看国产一区二区| 亚洲欧美区自拍先锋| eeuss鲁一区二区三区| 中文字幕免费不卡在线| 国产成人免费视频| 中文字幕欧美日本乱码一线二线| 国产精品99久久久久久似苏梦涵 | 成人av片在线观看| 久久精品夜夜夜夜久久| 精品国产免费人成在线观看| 日韩欧美国产三级| 欧美国产精品一区| 亚洲伊人伊色伊影伊综合网| 日韩精品一区二区三区四区视频 | 欧美高清hd18日本| 久久机这里只有精品| 亚洲人成亚洲人成在线观看图片| 欧美性受极品xxxx喷水| 亚洲综合一区二区三区| 国产精品久久毛片av大全日韩| 91搞黄在线观看| 色综合 综合色| 色老汉一区二区三区| 欧美亚洲禁片免费| 日韩毛片一二三区| 久久免费午夜影院| 婷婷夜色潮精品综合在线| 精品一区二区三区欧美| 在线观看亚洲一区| 久久先锋影音av| 精品在线播放免费| 欧美日本国产视频| 中文字幕一区在线观看视频| 免费欧美在线视频| 91麻豆福利精品推荐| 欧美性感一区二区三区| 欧美性猛交xxxx乱大交退制版| 色婷婷精品久久二区二区蜜臂av | 色av综合在线| 成人免费视频一区二区| 99久久免费视频.com| 欧美日韩免费视频| 在线国产电影不卡| 日韩一区二区三区视频在线观看| 亚洲成a人片在线观看中文|