📄 control.c
字号:
break ;
PWM5_Set( CYCLE , ( CYCLE / 2 ) ) ;
printf( "\tNow beep CYCLE is %duS\n" , ( CYCLE * 10 ) ) ;
}
PWM5_Stop() ;
//return 1 ;
}
/****************************************************************************
* 名称:LedSet()
* 功能:根据表DISP_TAB来控制LED显示
****************************************************************************/
void LedSet( U32 m )
{
if ( m & 0x01 )
IO0SET = IO0SET | ( 1 << 2 ) ;
else
IO0CLR = IO0CLR | ( 1 << 2 ) ;
if ( m & 0x08 )
IO0SET = IO0SET | ( 1 << 4 ) ;
else
IO0CLR = IO0CLR | ( 1 << 4 ) ;
if ( m & 0x4 )
IO0SET = IO0SET | ( 1 << 5 ) ;
else
IO0CLR = IO0CLR | ( 1 << 5 ) ;
if ( m & 0x02 )
IO0SET = IO0SET | ( 1 << 6 ) ;
else
IO0CLR = IO0CLR | ( 1 << 6 ) ;
if ( m & 0x80 )
IO2SET = IO2SET | ( 1 << 28 ) ;
else
IO2CLR = IO2CLR | ( 1 << 28 ) ;
if ( m & 0x40 )
IO2SET = IO2SET | ( 1 << 29 ) ;
else
IO2CLR = IO2CLR | ( 1 << 29 ) ;
if ( m & 0x20 )
IO2SET = IO2SET | ( 1 << 30 ) ;
else
IO2CLR = IO2CLR | ( 1 << 30 ) ;
if ( m & 0x10 )
IO2SET = IO2SET | ( 1 << 31 ) ;
else
IO2CLR = IO2CLR | ( 1 << 31 ) ;
}
/****************************************************************************
* 名称:LedDisp()
* 功能:根据表DISP_TAB来控制LED显示。
****************************************************************************/
void LedDisp( U32 m , U32 delay_time )
{
while ( m-- )
{
LedSet( ~0x01 ) ;
Delay( delay_time ) ;
LedSet( ~0x02 ) ;
Delay( delay_time ) ;
LedSet( ~0x04 ) ;
Delay( delay_time ) ;
LedSet( ~0x08 ) ;
Delay( delay_time ) ;
LedSet( ~0x10 ) ;
Delay( delay_time ) ;
LedSet( ~0x20 ) ;
Delay( delay_time ) ;
LedSet( ~0x40 ) ;
Delay( delay_time ) ;
LedSet( ~0x80 ) ;
Delay( delay_time ) ;
}
}
U8 Get_Keystoke( void )
{
if ( ( IO2PIN & ( 1 << 16 ) ) == 0 )
return 1 ;
else if ( ( IO2PIN & ( 1 << 17 ) ) == 0 )
return 2 ;
else if ( ( IO2PIN & ( 1 << 18 ) ) == 0 )
return 3 ;
else if ( ( IO2PIN & ( 1 << 19 ) ) == 0 )
return 4 ;
else if ( ( IO2PIN & ( 1 << 20 ) ) == 0 )
return 5 ;
else if ( ( IO2PIN & ( 1 << 21 ) ) == 0 )
return 6 ;
else if ( ( IO2PIN & ( 1 << 22 ) ) == 0 )
return 7 ;
else if ( ( IO0PIN & ( 1 << 30 ) ) == 0 )
return 8 ;
else
return 0 ;
}
void Keystoke_Test(void)
{
U8 m ;
printf( "Keystoke test, ESC key to exit\n" );
while ( getkey() != ESC_KEY )
{
m = Get_Keystoke() ;
if(m)printf("Key=%d\n",m);
if ( m != 0 )
{
LedSet( ~( 1 << ( m - 1 ) ) ) ;
PWM5_Set( ( m * 10 ) , ( m * 5 ) ) ;
Delay( 50 ) ;
PWM5_Stop() ;
}
else
LedSet( 0xff ) ;
}
//return 1 ;
}
void __irq IRQ_Exception( void )
{
while ( 1 ); // 这一句替换为自己的代码
}
void FIQ_Exception( void )
{
while ( 1 ); // 这一句替换为自己的代码
}
void TargetInit( void )
{
/* 添加自己的代码 */
}
void Delay( U32 ms )
{
U32 CLK = ( Fcclk / 1000 ) * ms / 2 ;
while ( CLK-- ) ; //这个语句需要两条汇编指令
}
void Delay_uS( U32 us ) //以uS为延时单位
{
U32 CLK = ( Fcclk / 1000000 ) * us / 2 ;
while ( CLK-- ) ; //这个语句需要两条汇编指令
}
int WaitEventWithTimeout( int ( *event ) ( void ) , int cond , U32 ms )
{
U32 i ;
int result;
while ( ms-- )
{
result = ( *event ) ();
if ( cond )
{
if ( result )
return 0;
}
else
{
if ( !result )
return 0;
}
for ( i = 0; i < 5000; )
i++ ;
}
return -1;
}
/******************************************************************
** serial function
*******************************************************************/
static U16 SerialPortSel;
U16 SerialSwitch( U16 port )
{
#ifdef SERIAL_PORTS_SWITCH
SerialPortSel = port ? 1 : 0;
#else
SerialPortSel = 0;
#endif
return SerialPortSel;
}
void SerialChgBaud( U32 mclk , U32 baud )
{
U32 Fdiv;
// U32 mclk = GetMasterClock();
U0LCR = 0x80; /* 允许访问分频因子寄存器 */
Fdiv = ( Fpclk / 16 ) / baud ; /* 设置波特率 */
U0DLM = Fdiv / 256;
U0DLL = Fdiv % 256;
U0LCR = 0x03; /* 禁止访问分频因子寄存器 */
/* 且设置为8,1,n */
U0IER = 0x00; /* 禁止接收和发送中断 */
U0FCR = 0x00; /* 初始化FIFO */
//**********************************************************************
U1LCR = 0x80; /* 允许访问分频因子寄存器 */
U1DLM = Fdiv / 256;
U1DLL = Fdiv % 256;
U1LCR = 0x03; /* 禁止访问分频因子寄存器 */
/* 且设置为8,1,n */
U1IER = 0x00; /* 禁止接收和发送中断 */
U1FCR = 0x00; /* 初始化FIFO */
}
void SerialTxEmpty( void )
{
if ( SerialPortSel )
while ( !( U1LSR & 0x20 ) ); //还有数据未发送完,等待
else
while ( !( U0LSR & 0x20 ) ); //还有数据未发送完,等待
}
void SerialTxChar( char data )
{
//U16 m ;
if ( SerialPortSel )
{
if ( data == '\n' )
{
while ( !( U1LSR & 0x20 ) ); //还有数据未发送完,等待
//for( m = 0; m < 100; ) m++ ; //短暂延时防止超级终端来不及响应
U1THR = '\r' ;
}
while ( !( U1LSR & 0x20 ) ); //还有数据未发送完,等待
//for( m = 0; m < 100; ) m++ ; //短暂延时防止超级终端来不及响应
U1THR = data; // 发送数据
}
else
{
if ( data == '\n' )
{
while ( !( U0LSR & 0x20 ) ); //还有数据未发送完,等待
//for( m = 0; m < 100; ) m++ ; //短暂延时防止超级终端来不及响应
U0THR = '\r' ;
}
while ( !( U0LSR & 0x20 ) ); //还有数据未发送完,等待
//for( m = 0; m < 100; ) m++ ; //短暂延时防止超级终端来不及响应
U0THR = data; // 发送数据
}
}
void SerialTxString( char* s )
{
while ( *s )
SerialTxChar( *s++ );
}
int SerialRxReady( void )
{
if ( SerialPortSel )
return ( U1LSR & 0x01 ); //Receive data ready
else
return ( U0LSR & 0x01 ); //Receive data ready
}
char SerialRxKey( void )
{
if ( SerialPortSel )
{
if ( U1LSR & 0x01 ) //Receive data ready
return U1RBR ;
}
else
{
if ( U0LSR & 0x01 ) //Receive data ready
return U0RBR ;
}
return 0;
}
char SerialRxChar( void )
{
if ( SerialPortSel )
{
while ( ( U1LSR & 0x01 ) == 0 ); //没有收到数据
return U1RBR ;
}
else
{
while ( ( U0LSR & 0x01 ) == 0 ); //没有收到数据
return U0RBR ;
}
return 0 ;
}
int SerialRxToBuf( char* b )
{
if ( SerialPortSel )
{
if ( U1LSR & 0x01 ) //Receive data ready
*b = U1RBR ;
else
return 0;
}
else
{
if ( U0LSR & 0x01 ) //Receive data ready
*b = U0RBR ;
else
return 0;
}
return 1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -