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

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

?? vs1001.c

?? yampp的MP3資料 非常好大家來看一看
?? 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一区二区三区免费野_久草精品视频
色综合天天综合网天天狠天天| 一区二区在线观看视频| 亚洲18影院在线观看| 91亚洲永久精品| 日本一区二区在线不卡| 国产精品一级在线| 久久精品网站免费观看| 久久99精品国产.久久久久 | 在线精品视频小说1| 久久女同性恋中文字幕| 亚洲成av人片一区二区三区| 精品一区二区免费看| 欧美浪妇xxxx高跟鞋交| 亚洲曰韩产成在线| 色综合久久88色综合天天6| 中文字幕乱码一区二区免费| 国产精品综合视频| 日韩精品一区二区三区视频 | 中文字幕 久热精品 视频在线| 日本视频在线一区| 欧美福利一区二区| 亚洲mv在线观看| 欧美日韩高清影院| 日韩专区一卡二卡| 制服丝袜亚洲播放| 欧美日韩久久久久久| 日韩不卡一二三区| 日韩一区二区视频| 国产精品18久久久久久久网站| 日韩欧美一级特黄在线播放| 国内精品自线一区二区三区视频| 精品国产三级电影在线观看| 制服丝袜中文字幕一区| 蜜桃精品在线观看| 久久综合久久综合九色| 国产91丝袜在线播放| 一区在线观看免费| 欧洲亚洲精品在线| 日本不卡不码高清免费观看| 久久久九九九九| 欧美亚洲综合网| 精品夜夜嗨av一区二区三区| 欧美一区二区免费| 99精品视频在线免费观看| 一区二区三区日韩在线观看| 91精品综合久久久久久| 粉嫩aⅴ一区二区三区四区五区| 亚洲精品成人在线| 2021国产精品久久精品| 色婷婷综合久久久久中文| 九色porny丨国产精品| 国产精品成人一区二区艾草 | 欧美一区二区三区免费在线看| 国产曰批免费观看久久久| 亚洲精品一二三区| 国产日产欧美一区二区视频| 欧美视频日韩视频| 成人福利视频在线| 久久国产福利国产秒拍| 亚洲老司机在线| 国产精品国产精品国产专区不片| 欧美一区二区三区婷婷月色| 在线观看国产一区二区| 成人激情小说乱人伦| 另类的小说在线视频另类成人小视频在线 | 婷婷丁香激情综合| 亚洲人成网站色在线观看| 4438x亚洲最大成人网| 99riav久久精品riav| 免费精品视频在线| 一区二区不卡在线视频 午夜欧美不卡在 | 成人av手机在线观看| 久久国产剧场电影| 蜜臀av一区二区| 日韩中文字幕亚洲一区二区va在线| 亚洲图片你懂的| 国产精品久久影院| 中文字幕中文字幕中文字幕亚洲无线| 日韩一区二区免费电影| 日韩一区二区三区高清免费看看| 在线一区二区视频| 日韩一卡二卡三卡| 日韩一卡二卡三卡四卡| 精品国产乱码久久久久久夜甘婷婷 | 国内外精品视频| 99久久国产免费看| 裸体在线国模精品偷拍| 中文字幕日韩欧美一区二区三区| www国产成人| 国产日本一区二区| 国产亚洲自拍一区| 中文字幕在线视频一区| ...xxx性欧美| 亚洲成人你懂的| 狠狠色狠狠色综合日日91app| 国产伦精品一区二区三区视频青涩 | 国产精品嫩草99a| 国产精品成人网| 一区二区三区国产精华| 国产精品素人视频| 国产日韩精品一区二区浪潮av| 久久av资源网| 国产亚洲美州欧州综合国| 日韩精品电影一区亚洲| 欧美日韩综合色| 亚洲女子a中天字幕| 欧美色中文字幕| 七七婷婷婷婷精品国产| 日韩午夜在线观看视频| 精品一区二区在线免费观看| 久久综合九色综合久久久精品综合| 视频一区国产视频| 678五月天丁香亚洲综合网| 紧缚奴在线一区二区三区| 中文字幕不卡的av| 欧美色男人天堂| 亚洲国产va精品久久久不卡综合| 色丁香久综合在线久综合在线观看| 婷婷丁香久久五月婷婷| 精品国产1区二区| 国产不卡视频在线播放| 中文字幕不卡在线| 波多野结衣在线一区| 一区二区三区免费观看| 91精品国产综合久久久蜜臀图片| 久久av老司机精品网站导航| 国产精品天美传媒沈樵| 日韩欧美你懂的| 99v久久综合狠狠综合久久| 一区二区三区丝袜| 精品国产凹凸成av人导航| youjizz久久| 成人做爰69片免费看网站| 免费av网站大全久久| 国产精品久久777777| 日韩欧美一区二区久久婷婷| 色诱亚洲精品久久久久久| 极品少妇xxxx精品少妇偷拍| 一区二区在线观看免费视频播放| 精品国产精品一区二区夜夜嗨| 波多野结衣91| 国产一区二区91| 国内精品久久久久影院一蜜桃| 亚洲mv大片欧洲mv大片精品| 亚洲视频在线一区| 国产肉丝袜一区二区| 欧美午夜精品久久久久久孕妇| 久久精品亚洲乱码伦伦中文| 亚洲免费观看高清| 99久久免费视频.com| 国产精品乡下勾搭老头1| 日韩精品亚洲一区| 亚洲欧美经典视频| 国产欧美一区二区精品性色| 欧美日韩大陆一区二区| 欧洲另类一二三四区| 成人中文字幕电影| 国产精品99久久久久久似苏梦涵 | 亚洲高清视频的网址| 亚洲精品国产无套在线观| 国产欧美精品一区二区色综合朱莉| 色欧美日韩亚洲| 成人午夜av在线| 在线视频国产一区| 欧美日韩精品福利| 制服丝袜一区二区三区| 欧美一区日本一区韩国一区| 欧美精品国产精品| 欧美亚洲一区三区| 91精品国产色综合久久ai换脸 | 5月丁香婷婷综合| 欧美久久久久免费| 欧美不卡123| 久久一区二区视频| 国产精品毛片无遮挡高清| 亚洲欧洲日韩女同| 亚洲乱码中文字幕| 亚洲日本在线视频观看| 亚洲精品中文在线影院| 日韩成人伦理电影在线观看| 精品一区二区三区免费视频| 成人99免费视频| 在线免费视频一区二区| 欧美一区二区视频网站| 久久久久久久久久美女| 亚洲欧美在线视频观看| 老司机精品视频在线| 成人精品亚洲人成在线| 欧美日本精品一区二区三区| 久久先锋影音av鲁色资源网| 日韩三级.com| 在线观看日韩一区| 日本精品裸体写真集在线观看 | 中文字幕亚洲一区二区av在线| 一区二区三区在线观看国产 | 国产精品人成在线观看免费| 日韩专区一卡二卡| av亚洲精华国产精华| 久久色.com| 日韩av电影天堂|