-
谢谢大家!
我还有些疑问,就是如果有一个外部事件,或者中断唤醒了CPU,是不是只执行中断程序,或者一唤醒事件,主程序会运行吗?
-
按照楼上的说法,系统设定了这个安全机制。应用程序就没有办法躲过了,是嘛?只能以管理员权限运行才行了嘛?
-
没在ARM7上试过,呵呵,所以,我也不知道答案,顶顶!
-
串口处理
简单说明 串口1用来显示,无中断,查询发送
串口2中断发送,中断接收
// usart.h
#ifndef __USART__H__
#define __USART__H__
#define UART2_RX_QUEUE_SIZE 1024
#define UART2_TX_QUEUE_SIZE 1024
void usart_init(int usart_num);
int USART2_SendDataLen( unsigned char *pData,int len);
#endif
// usart.c
#include "global.h"
// 串口队列
struct UART_STRUCT
{
struct QueueBuffer *psSend; //发送队列指针
struct QueueBuffer *psReci; //接收队列指针
};
struct UART_STRUCT pUart2; //定义串口的结构体
//串口接收
#define Uart2_Rx_Push(x) Queue_Push(pUart2.psReci,x)
#define Uart2_Rx_Pop() Queue_Pop(pUart2.psReci)
#define Uart2_Rx_Num() Queue_Num(pUart2.psReci)
#define Uart2_Rx_Full() Queue_is_full(pUart2.psReci)
#define Uart2_Rx_Empty() Queue_is_empty(pUart2.psReci)
#define Uart2_Rx_Clr() do{Queue_Clear(pUart2.pReci);}while(0)
// 串口发送
#define Uart2_Tx_Push(x) Queue_Push(pUart2.psSend,x)
#define Uart2_Tx_Pop() Queue_Pop(pUart2.psSend)
#define Uart2_Tx_Num() Queue_Num(pUart2.psSend)
#define Uart2_Tx_Full() Queue_is_full(pUart2.psSend)
#define Uart2_Tx_Empty() Queue_is_empty(pUart2.psSend)
#define Uart2_Tx_Clr() do{Queue_Clear(pUart2.psend);}while(0)
/*******************************************************************************
* Function Name : usart_init()
* Description : This routine is called to set the configuration value
* Then each class should configure device themself.
* Input : None.
* Output : None.
* Return : Return USB_SUCCESS, if the request is performed.
* Return USB_UNSUPPORT, if the request is invalid.
*******************************************************************************/
void usart_init(int usart_num)
{
GPIO_InitTypeDef GPIO_InitStructure;
USART_InitTypeDef USART_InitStructure;
if(USE_USART1 == usart_num)
{
// 配置时钟
/* Enable GPIOx clock */
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
/* Enable USARTx clocks */
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
// 配置IO
/* Configure USARTx_Tx as alternate function push-pull */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(GPIOA, &GPIO_InitStructure);
/* Configure USARTx_Rx as input floating */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOA, &GPIO_InitStructure);
USART_InitStructure.USART_BaudRate = 115200;
USART_InitStructure.USART_WordLength = USART_WordLength_8b;
USART_InitStructure.USART_StopBits = USART_StopBits_1;
USART_InitStructure.USART_Parity = USART_Parity_No ;
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
/* Configure the USARTx */
USART_Init(USART1, &USART_InitStructure);
/* Enable USART2 Receive interrupts */
// USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);
/* Enable the USARTx */
USART_Cmd(USART1, ENABLE);
}
else if(USE_USART2 == usart_num)
{
/* Enable GPIOx clock */
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
/* Enable USARTx clocks */
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);
/* Configure USARTx_Tx as alternate function push-pull */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(GPIOA, &GPIO_InitStructure);
/* Configure USARTx_Rx as input floating */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOA, &GPIO_InitStructure);
USART_InitStructure.USART_BaudRate = 115200;
USART_InitStructure.USART_WordLength = USART_WordLength_8b;
USART_InitStructure.USART_StopBits = USART_StopBits_1;
USART_InitStructure.USART_Parity = USART_Parity_No ;
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
/* Configure the USARTx */
USART_Init(USART2, &USART_InitStructure);
pUart2.psSend=Queue_Register(UART2_TX_QUEUE_SIZE);
pUart2.psReci=Queue_Register(UART2_RX_QUEUE_SIZE);
/* Enable USART2 Receive interrupts */
USART_ITConfig(USART2, USART_IT_RXNE, ENABLE);
USART_ITConfig(USART2, USART_IT_TXE, ENABLE);
/* Enable the USARTx */
USART_Cmd(USART2, ENABLE);
}
}
// return 返回可发送字节数
int USART2_SendDataLen( unsigned char *pData,int len)
{
int i;
unsigned char *p;
p = pData;
for(i = 0; i < len; i++)
{
if(!Uart2_Tx_Full())
{
Uart2_Tx_Push(*p++);
}
else
{
break;
}
}
USART_ITConfig(USART2, USART_IT_TXE, ENABLE);//只要发送寄存器为空,就会一直有中断,因此,要是不发送数据时,把发送中断关闭,只在开始发送时,才打开
return (i + 1);
}
void USART2_IRQHandler(void)
{
if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET)
{
/* Read one byte from the receive data register */
Uart2_Rx_Push(USART_ReceiveData(USART2));
}
//发送中断
if( USART_GetITStatus(USART2, USART_IT_TXE) == SET )
{
if(!Uart2_Tx_Empty())
{
USART_SendData(USART2, Uart2_Tx_Pop());
}
else
{
USART_ITConfig(USART2, USART_IT_TXE, DISABLE);
}
}
}
-
引用 11 楼 jbb0523 的回复:
呵呵,同志,帮你顶帖不算贡献么?怎么还会“晕”呢?
引用 7 楼 alex_yung 的回复:
引用 6 楼 jbb0523 的回复:
其实对于技术我不懂,只是看到标题中的保定二字进来看看的,呵呵。。。
晕…… 又一个打酱油的
谢谢哈 大哥 以后你问问题我也去给你顶……
-
我安装VS2005时,WIN7默认的LICENSE授权名是q,被告我改成了其他名字,这有没有影响呀?
-
我觉得你应该先把你们之间通讯的接口搞清楚,才知道下一步的工作。一定要知道整个系统的原理!
-
这里
#define Clear_timer2_it TIM2_SR &= ~(uint16)(1<<0)
-
这种公司看下具体那款单片机的datasheet就ok了
-
win7下,我连 Windows Embedded CE 6.0 Platform Builder 都没安装成功
最后只好用虚拟机...
-
恩恩,好的,我试试。谢谢kyzf!
-
高手请跟贴。
-
即使编译器有BUG,也不可能2次对同样的程序编译产生不同的结果。
-
引用楼主 xiajia 的回复:
下载libusb-0.1.12的代码,
首先在pc上编译libusb,然后编译自己的代码,运行,一切正常,没有异常。
然后交叉编译,完成之后在交叉编译自己的程序,将编译后的库和可执行文件放到OMAP3530上面
运行提示错误:error submitting URB: No such file or directory
不知道大家是否遇到同样的问题,该如何解决呢?
没有用过,帮顶
-
1、串口收发是分开的,可以全双工,收发互不影响;
2、收发信号线功能固定,不能改变;
3、启动串口收发操作前,一般还需要设置串口参数,打开串口的操作,不能上来就调用收发功能。
-
不能唤醒应该不是因为ERROR: Power Handler function yield to low priority thread.
我们的机器关机的时候也有这条信息,但是可以唤醒,楼上几位的说法我去查下,似乎powerdown函数里边是有些东西
-
注册表设置呢?
-
香版
我当时还不完全确定是你
原来还真是!顶!
本想等TCP时好好听下
ADC时先偷偷睡觉一会(adc 目前工作及项目基本不会使用到)
听你讲的很精彩 就没睡意 认真听讲了。哈哈
-
http://download.eeworld.net/source/1640908 USB2.0 原理 与 工程 开发
http://download.eeworld.net/source/1552798 USB大全
这两本书,中文的,介绍USB的,还不错。
-
引用 4 楼 congyue123 的回复:
对于充电IC的话,是有一个反馈端的,一般都是FB这个pin,调节这个pin的分压网络,就能调节充电电流了。楼主可以尝试改变这个分压网络,再看看现象。
这个反馈我是知道的,现在的问题是,通过公式计算的反馈电阻阻值在接入电路以后,和设想中的充电电流相差太远