-
之前用过啦 感觉不错 很用心
感觉是一系列的经过验证的电路 可以供芯片选型使用 :)
-
支持新版主 嘿嘿 大家可以跟帖说说自己的笔记本维修经历哈
俺家妹妹有个笔记本,某个按键坏掉了,这是不是得全换
-
好东西 收着了 谢谢楼主
-
已经看到楼主一点点进展 很不错
-
真的?哇 那试试看 我在北京 9号那场
-
感觉坛子最近使用LPC的挺多 不如趁热打铁吧
-
目前网上查询搜到三家比较有名气的嵌入式培训机构,分别是华清远见,亚嵌,尚观。
-
一味追求新鲜玩意也有弊端 呵呵
-
很多情况下 酒精是个好东西 呵呵
-
不错的东西 呵呵
-
现在愈发感到 电磁兼容是个大问题
大家有啥经验分享不
-
#define SCI_DRIVER
/*****************************************************************************************
*Copyright: xxxxxCorporation
*
*File name: SciDriver.c
*
*Author: Kenny_wang
*
*Version: V1.0
*
*Date: *
******************************************************************************************/
#include "SciDriverSciDriver.h"
#include "SciDriverSourceFunLst.h"
#include "SciDriverPortsSciconfig.h"
/********************************************************************************
* Constant Define *
********************************************************************************/
#define cQBufNormal 0
#define cQBufFull 1
#define cQBufEmpty 2
/********************************************************************************
* Queue structure *
********************************************************************************/
typedef struct{
unsigned char *pIn;
unsigned char *pOut;
unsigned char *pStart;
unsigned int bLength;
unsigned int wSize;
}QUEUE;
/********************************************************************************
* Sci structure *
* Including tranmit and receive queue structure and Tx,Rx threshold variabls *
********************************************************************************/
typedef struct{
unsigned char bTxStatus;
unsigned int wTxLength;
unsigned char *pbTx;
QUEUE *pqRx;
unsigned char bSciType;
}SciStruct;
/********************************************************************************
* List of Sci structure and queue *
********************************************************************************/
SciStruct SciList;
SciStruct *pSciIndex;
QUEUE QList;
unsigned char bSciRxBuf[MAX_SCI_BUF_SIZE];
unsigned char *pSciBuf = bSciRxBuf;
unsigned char bSciNo = 0;
/********************************************************************************
* Internal Function Declaration *
********************************************************************************/
void sQInit(QUEUE *pq,unsigned char *pStart,unsigned int wSize);
unsigned char sQDataIn(QUEUE *pq,unsigned char bData);
unsigned char sQDataOut(QUEUE *pq,unsigned char *pData);
/********************************************************************************
*Function name: sQInit *
*Parameters: pq: pointer to queue structure to be initialized *
* start: start address of ring buffer *
* size: the size of the ring buffer *
*Description: initialize a queue structure *
********************************************************************************/
void sQInit(QUEUE *pq,unsigned char *pStart,unsigned int wSize)
{
pq->pIn = pStart;
pq->pOut = pStart;
pq->pStart = pStart;
pq->bLength = 0;
pq->wSize = wSize;
}
/********************************************************************************
*Function name: sQDataIn *
*Parameters: pq: pointer to queue structure to be initialized *
* data: the data to be inserted into the queue *
*Returns: cQBufNormal: data has been inserted into the queue *
* cQBufFull: the buffer is full *
*Description: insert a data into the queue *
********************************************************************************/
unsigned char sQDataIn(QUEUE *pq,unsigned char bData)
{
if(pq->bLength == pq->wSize)
{
if(pq->pIn == pq->pStart)
{
*(pq->pStart + pq->wSize) = bData;
}
else
{
*(pq->pIn-1) = bData;
}
return(cQBufFull);
}
else
{
*(pq->pIn) = bData;
pq->bLength++;
if(pq->pIn == pq->pStart + pq->wSize - 1)
{
pq->pIn = pq->pStart;
}
else
{
pq->pIn++;
}
return(cQBufNormal);
}
}
/********************************************************************************
*Function name: sQDataOut *
*Parameters: pq: pointer to queue structure to be initialized *
* pdata: the address to save the data *
*Returns: cQBufNormal: data has been inserted into the queue *
* cQBufEmpty: the buffer is empty *
*Description: Get a data from the queue *
********************************************************************************/
unsigned char sQDataOut(QUEUE *pq,unsigned char *pData)
{
if(pq->bLength == 0)
{
return(cQBufEmpty);
}
*pData = *(pq->pOut);
pq->bLength--;
if(pq->pOut == pq->pStart + pq->wSize - 1)
{
pq->pOut = pq->pStart;
}
else
{
pq->pOut++;
}
return(cQBufNormal);
}
/********************************************************************************
*Function Name: sInitialSci *
*Parameters: bSciId: sci id *
* *bRxBuf: receive buffer start address *
* wRxSize: receive buffer length *
* bTxBuf: transmit buffer start address *
* wTxSize: transmit buffer length *
* type: sci type *
*Descriptions: assign and initialize the sci control struct to sci *
********************************************************************************/
void sInitialSci(unsigned int wRxSize,unsigned char bType)
{
QUEUE *pq;
SciStruct *pSci;
pSci = &SciList;
pSciIndex = pSci;
pSci->pqRx = &QList;
pq = pSci->pqRx;
sQInit(pq,pSciBuf,wRxSize);
pSciBuf += wRxSize;
bSciNo++;
pSci->bTxStatus = cSciTxRdy;
pSci->wTxLength = 0;
pSci->bSciType = bType;
}
/********************************************************************************
*Function Name: sSciRxISR *
*Parameters: bSciId: sci id *
*Description: This function is executed in Sci rx interrupt io2sci rx compare *
* interrupt. *
********************************************************************************/
void sSciRxISR(void)
{
unsigned char bData;
QUEUE *pq;
SciStruct *pSci;
pSci = pSciIndex;
pq = pSci->pqRx;
if(sbGetSciRxRdy() == cSciRxRdy)
{
sSciResetRx();
bData = sbGetSciRxData();
sQDataIn(pq,bData);
}
}
/********************************************************************************
*Function Name: sSciRead *
*Parameters: bSciId: sci id *
* *pBuf: address to save data received *
*Returns: cSciRxBufEmpty: receive buffer is empty *
* cSciRxRdy: get one byte data successfully *
*Description: This function is executed in AP *
********************************************************************************/
unsigned char sSciRead(unsigned char *pBuf)
{
QUEUE *pq;
unsigned char bTemp;
SciStruct *pSci;
pSci = pSciIndex;
pq = pSci->pqRx;
OS_ENTER_CRITICAL();
bTemp = sQDataOut(pq,pBuf);
OS_EXIT_CRITICAL();
if(bTemp == cQBufEmpty)
{
return(cSciRxBufEmpty);
}
else
{
return(cSciRxRdy);
}
}
/********************************************************************************
*Function Name: sSciTxISR *
*Parameters: bSciId: sci id *
*Description: This function is executed in Sci Tx interrupt io2sci Tx compare *
* interrupt. *
********************************************************************************/
void sSciTxISR(void)
{
SciStruct *pSci;
pSci = pSciIndex;
if(sbGetSciTxRdy() == cSciTxRdy)
{
if(pSci->wTxLength == 0)
{
pSci->bTxStatus = cSciTxRdy;
sSciResetTx();
}
else
{
sSciTxData(*(pSci->pbTx));
(pSci->pbTx)++;
(pSci->wTxLength)--;
sSciResetTx();
}
}
}
/********************************************************************************
*Function Name: sSciWrite *
*Parameters: bSciId: sci id *
* *pstart: start address of data to be sent *
* wLength: the length of data to be send *
*Returns: cSciTxBufFull: transmit buffer is empty *
* cSciTxRdy: send one byte data successfully *
*Description: This function is executed in AP *
********************************************************************************/
unsigned char sSciWrite(unsigned char *pStart,unsigned int wLength)
{
SciStruct *pSci;
pSci = pSciIndex;
if(pSci->bTxStatus == cSciTxBusy)
{
return(cSciTxBusy);
}
OS_ENTER_CRITICAL();
pSci->pbTx = pStart;
pSci->wTxLength = wLength;
pSci->bTxStatus = cSciTxBusy;
sSciTxData(*(pSci->pbTx));
(pSci->pbTx)++;
(pSci->wTxLength)--;
OS_EXIT_CRITICAL();
return(cSciTxRdy);
}
/********************************************************************************
*Function Name: sbGetSciTxStatus *
*Parameters: bSciId: sci id *
*Returns: sci tx status cSciTxRdy *
* cSciTxBusy *
*Description: Get the sci trasmit status *
********************************************************************************/
unsigned char sbGetSciTxStatus(void)
{
SciStruct *pSci;
pSci = pSciIndex;
return(pSci->bTxStatus);
}
/********************************************************************************
*Function Name: sSetSciBaudRate *
*Parameters: bSciId: sci id *
*Returns: bBaudrate Sci Baudrate *
*Description: Set the sci baudrate *
********************************************************************************/
void sSetSciBaudRate(unsigned char bBaudrate)
{
sSciChangeBaudRate(bBaudrate);
}
-
相关信息:
美国卡内基梅隆大学(Carnegie Mellon University)宣布,该大学与微软共同开发出了将人体皮肤作为大尺寸触摸屏的技术“Skinput”(英文发布资料)。只需用一只手指点触手掌及手臂等的皮肤表面,即可操作游戏等。
该技术由卡内基梅隆大学的研究生Chris Harrison与微软的研究人员共同开发而成。Skinput是在袖箍内侧安装声波传感器并将其与计算机系统连接。可根据需要配合使用手掌大小的小型投影仪。配带该袖箍后,用一只手的手指敲击手臂及手掌,其振动会转变为声学脉冲,随后在皮肤上像波浪一样传播。臂带上的传感器检测出该脉冲后,传递给分析信息的计算机。
Harrison等通过关注声波脉冲的波形及强度因敲击手臂及手掌的部位不同而发生变化这一点,开发出了根据该波形信息等通知敲击的是手臂哪一部位的软件。“在手臂上,能以95.5%的准确率判断敲击部位”(Harrison)。
Harrison表示,通过利用该功能,可操作各种便携终端。比如,在手臂上将音乐播放器的各种操作划分为几个部位,只需用手指敲击手臂,便可操作与袖箍连接的音乐播放器。如果利用小型投影仪,还可将手臂及手掌作为屏幕来收看或收听音视频以及操作游戏机及手机等。
Skinput利用投影仪等、以手掌等代替手机界面这一点与美国麻省理工学院(MIT)开发的“Sixth Sense”相似。不同的是,利用Skinput时无需使用摄像机。检测敲击部位时,Sixth Sense采用的是基于摄像机的图像识别方法,而Skinput利用的是声波脉冲。另外,Skinput完全聚焦于便携终端界面,并不是实现以计算机信息强化现实信息的增强现实(AR,augmented reality),这一点Skinput与Sixth Sense也不同。
Harrison将Skinput的开发定位于分离便携终端通信等基本功能与界面的研究的一环。目前便携终端的体积越来越小,虽然携带方便这一点非常便利,不过,界面的按钮变小或者画面尺寸变小,反而变得不便于使用。因此,“利用身边的桌子及墙壁作为界面”这一想法便是开发Skinput的初衷。
-
自己顶一下 呵呵
-
-
-
-
-
-