本帖最后由 kyzb001 于 2010-11-16 08:04 编辑
小菜鸟写的I2C读写程序。程序中注释部分为Rx_Data里面的内容。奇怪是就 ,我用注释部分的代码,不用Rx_Data这个调用函数的时候,程序中的红色部分(for循环)能正常输出。但是我不用注释部分代码用,Rx_Data调用函数的时候,红色部分不能输出。应该说。Rx_Data调用完以后下面的代码貌似都没运行。就想在Rx_Data后面加了个while(1);
这个为用Rx_调用函数的输出:ARM Cortex-M0 UART0 0 1 2 3 4 5 6 7 8 9 a b c d e f 10 11 12 13 14 15 16 17 18 19 1a 1b 1c 1d 1e 1f The Rx is over result is:
这个是用注释部分不用调用函数输出的结果:| 芯唐ARM Cortex-M0 UART0演示程序 0 1 2 3 4 5 6 7 8 9 a b c d e f 10 11 12 13 14 15 16 17 18 19 1a 1b 1c 1d 1e 1f The Rx is over result is: | 已经读取完毕:现在进入输出打印阶段 0 1 2 3 4 5 6 7 8 9 a b c d e f 10 11 12 13 14 15 16 17 18 19 1a 1b 1c 1d 1e 1f
菜鸟经验缺乏,请教一下大家为什么。有可能是什么原因。或者怎么去检测。
感谢大家乐 /* Copyright(c) 2009 Nuvoton Technology Corp. All rights reserved. */
/* */
/*---------------------------------------------------------------------------------------------------------*/
#include <stdio.h>
#include "NUC1xx.H"
#include "Driver\DrvGPIO.h"
#include "Driver\DrvI2C.h"
#include "Driver\DrvSYS.h"
#include "Driver\DrvUART.h"
uint32_t Rx_code[]={0};
int32_t Tx_Code[]={12,32,12,3,213,5,4,12,51,1,31,23};
int32_t Rx_Data( )
{
uint8_t i=0;
int32_t sData[]={0};
DrvGPIO_InitFunction(E_FUNC_I2C0);
DrvI2C_Open(I2C_PORT0,100000);
for(i = 0; i < 32; i++)
{
DrvI2C_Ctrl(I2C_PORT0 , 1 , 0 , 0 , 0 );
while(I2C0->CON.SI==0);
I2C0->DATA=0XA0;
DrvI2C_Ctrl(I2C_PORT0 , 0 , 0 , 1 , 0 );
while(I2C0->CON.SI==0);
I2C0->DATA=0x00+i;
DrvI2C_Ctrl(I2C_PORT0 , 0 , 0 , 1 , 1 );
while(I2C0->CON.SI==0);
DrvI2C_Ctrl(I2C_PORT0 , 1, 0 , 1 , 0);
while(I2C0->CON.SI==0);
I2C0->DATA=0XA1;
DrvI2C_Ctrl(I2C_PORT0 , 0, 0 , 1 , 0);
DrvSYS_Delay(150);
while(I2C0->CON.SI==0);
DrvI2C_Ctrl(I2C_PORT0 , 0, 0 , 1 , 0);
while(I2C0->CON.SI==0);
sData=DrvI2C_ReadData(I2C_PORT0);
DrvI2C_Ctrl(I2C_PORT0 , 0 , 1 , 1 , 0);
}
DrvI2C_Close(I2C_PORT0);
DrvSYS_Delay(10000);
for(i = 0; i < 32; i++)
{
Rx_code=sData;
printf(" %x ",Rx_code);
}
printf(" The Rx is over result is: ");
return 0;
}
void Tx_UART(uint32_t Uart0_Flag)
{
uint8_t bInChar[1] = {0x55};
DrvUART_Write(UART_PORT0,bInChar,1);
}
int32_t main (void)
{
uint8_t i=0;
// uint8_t i=0;
int32_t sData[]={0};
unsigned char Title1[] = {"| 芯唐ARM Cortex- M0UART0演示程序 "};
unsigned char Title2[] = {"| 已经读取完毕:现在进 入输出打印阶段 "};
//串口初始化
DrvUART_EnableInt (UART_PORT0 ,DRVUART_RDAINT,Tx_UART );
DrvUART_Write(UART_PORT0,Title1,sizeof(Title1)-1);
//Tx_Data();
Rx_Data(); /*这个地方如果不用Rx_Data的话(吧Rx_Data里面的代码复制带这个位置),下面都能输出,但是用RX_Data就不能输出了*/
printf(" The Rx is over result is: ");
DrvUART_Write(UART_PORT0,Title2,sizeof(Title2)-1);
for(i = 0; i < 32; i++)
printf(" %x ", Rx_code);
while(1);
}
小菜鸟写的I2C读写程序。程序中注释部分为Rx_Data里面的内容。奇怪是就 我用注释部分的代码,不用Rx_Data这个调用函数的时候程序中的红色部分(for循环)能正常输出。但是叫我不用注释部分代码用Rx_Data调用函数的时候,红色部分不能输出。应该说。Rx_Data调用完以后下面的代码貌似都没运行。就想在Rx_Data后面加了个while(1);
这个为用Rx_调用函数的输出:ARM Cortex-M0 UART0 0 1 2 3 4 5 6 7 8 9 a b c d e f 10 11 12 13 14 15 16 17 18 19 1a 1b 1c 1d 1e 1f The Rx is over result is:
这个是用注释部分不用调用函数输出的结果:| 芯唐ARM Cortex-M0 UART0演示程序 0 1 2 3 4 5 6 7 8 9 a b c d e f 10 11 12 13 14 15 16 17 18 19 1a 1b 1c 1d 1e 1f The Rx is over result is: | 已经读取完毕:现在进入输出打印阶段 0 1 2 3 4 5 6 7 8 9 a b c d e f 10 11 12 13 14 15 16 17 18 19 1a 1b 1c 1d 1e 1f
菜鸟经验缺乏,请教一下大家为什么。有可能是什么原因。或者怎么去检测。
感谢大家乐 |