?? timer.c
字號:
#include "ICETEK-C6713-A.h"
#define UART_BASE_ADDR 0x90120000
#define MCWA *(int *)0x90100008
#define OFFSET 2
#define RBR *((short *)(UART_BASE_ADDR+0*OFFSET))// share the same address?
#define THR *((short *)(UART_BASE_ADDR+0*OFFSET))//
#define IER *((short *)(UART_BASE_ADDR+1*OFFSET))
#define IIR *((short *)(UART_BASE_ADDR+2*OFFSET))
#define FCR *((short *)(UART_BASE_ADDR+2*OFFSET))
#define LCR *((short *)(UART_BASE_ADDR+3*OFFSET))
#define MCR *((short *)(UART_BASE_ADDR+4*OFFSET))
#define LSR *((short *)(UART_BASE_ADDR+5*OFFSET))
#define MSR *((short *)(UART_BASE_ADDR+6*OFFSET))
#define SCR *((short *)(UART_BASE_ADDR+7*OFFSET))
#define DLL *((short *)(UART_BASE_ADDR+0*OFFSET))
#define DLM *((short *)(UART_BASE_ADDR+1*OFFSET))
#define CECTL1 *((long *)0x01800004)
#define DXR12 (*(unsigned int *)0x01900004)
#define DRR12 (*(unsigned int *)0x01900000)
/* Define McBSP1 Registers */
#define McBSP1_DRR *(int *)0x1900000 /* Address of data receive reg. */
#define McBSP1_DXR *(int *)0x1900004 /* Address of data transmit reg. */
#define McBSP1_SPCR *(int *)0x1900008 /* Address of serial port contl. r 串口控制寄存器 */
#define McBSP1_RCR *(int *)0x190000C /* Address of receive control reg. 接受控制寄存器 */
#define McBSP1_XCR *(int *)0x1900010 /* Address of transmit control reg. 傳送控制寄存器 */
#define McBSP1_SRGR *(int *)0x1900014 /* Address of sample rate generator */
#define McBSP1_MCR *(int *)0x1900018 /* Address of multichannel reg. 多通道標志*/
#define McBSP1_RCER *(int *)0x190001C /* Address of receive channel enable. 接收通道使能 */
#define McBSP1_XCER *(int *)0x1900020 /* Address of transmit channel enable. 傳輸通道使能 */
#define McBSP1_PCR *(int *)0x1900024 /* Address of pin control reg. */
#define MCWA *(char *)0x90100008
short int nChannelA0[256],nChannelA1[256]; // 0通道存儲區,1通道存儲區
short int nAD0[256],nAD1[256];
int nPointNumber;
int flage;
int uWork;
int inp[256];
int length;
int channel;
char cString[17]={ "Hello PC!,Over|" },cReceive,cBuffer[17],cAnswer[16]={"Oh,you say"};
int bReceive,nLen;
void wait(int nWait);
void serial();
void Init_serial();
void initMCBSP1(void);
void interrupt Timer( void ); //////中斷服務程序 要 加interrupt
void initInterrupt(void);
main()
{
nPointNumber=0;
init_emif(); // 初始化emif
InitCTR(); // 初始化ICETEK-CTR
InitInterrupt();
Init_serial();
MCWA=0x0001;
CSR&=0xfffffffe; // 關中斷 GIE=0
initMCBSP1();
flage=0;
channel=0;
CSR=CSR|1; // 開中斷
while ( 1 )
{
Delay(16);
}
CloseCTR();
exit(0);
}
void InitInterrupt(void)
{
// 設置中斷控制寄存器
CSR&=0xfffffffe; // 關中斷 GIE=0
ISTP=0x00000c00; // 重置中斷向量表到0C00h
IMH=0x08000000; // 指定Timer1產生int15中斷
IML=0;
ICR=0xff; // 清除等待的中斷
IER=0x8003; // 使能int15中斷
// 設置定時器產生中斷信號的頻率
TIMER1PRD=6250000; // 定時器1的周期=6250000, 0.5s
TIMER1CTL=0x3c0; // 開始計數
CSR=CSR|1; // 開中斷
}
void interrupt Timer() //中斷響應函數
{
//指示燈閃爍
int k ,a=0;
k=0;
k++;
LBDS^=1;
if(k==50)
{
Delay(5000);
}
a++;
if(a==10)
{
serial();
LBDS^=2;
//ad采樣子程序
if(channel) //channel 通道選擇,為1 執行,,,,,
{
DXR12=0xe000; //數據發送寄存器,數據要加載到數據移位發送器XSR
}
else
{
DXR12=0xc000;
}
uWork=DRR12; //數據接受寄存器,準備把數據放到總線
uWork=uWork>>20; //右移20位
uWork&=0xff; //取低8位,
inp[length]=uWork; //
length++;
length%=256; //
if(length==0)
{
asm(" nop"); //此處設軟件斷點
}
}
}
void Initserial(void)
{ MCWA=0x00080008;
bReceive=0; // write the recieve flag
LSR = 0x80; //線路控制寄存器
DLL = 0x18; //低位除數寄存器
DLM = 0x00; //高位除數寄存器
LCR = 0x03; //線路狀態寄存器
FCR = 0x01; //FIFO控制寄存器
MCR = 0x00; //MODEM控制寄存器
IER = 0x00; //中斷使能寄存器
}
void wait(int nWait) // waiting for the parameter nwait=1024
{
int i,j,k=0;
for ( i=0;i<nWait;i++ )
for ( j=0;j<64;j++ )
k++;
}
void serial(void)
{
unsigned int uWork;
int i;
Init_serial();
while ( 1 )
{
if ( bReceive==0 ) //發送 cString[17]={ "Hello PC!,Over|" }
{
for ( i=0;i<16;i++ )
{
do
{
uWork=LSR; //把狀態寄存器值給uwork,做判斷
}
while ( uWork&0x040 != 0x040 ); //判斷是否為空發送保持寄存器標志位
THR=cString[i]; //發送緩沖寄存器THR
wait(1024); //等待函數
}
}
break;
}
}
void initMCBSP1(void)
{
McBSP1_SPCR = 0;
McBSP1_RCR = 0x10040;
McBSP1_XCR = 0x10040;
McBSP1_SRGR = 0x20000083;
McBSP1_PCR = 0xa08;
McBSP1_SPCR = 0xc15801;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -