| 本帖最后由 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
 
 菜鸟经验缺乏,请教一下大家为什么。有可能是什么原因。或者怎么去检测。
 感谢大家乐
 |