📄 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 + -