This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

CC2530 IO口初始化

Other Parts Discussed in Thread: CC2530, CC2530EM

现CC2530使用Zstack 2.5.1a做应用,在用户程序中需要初始化P0.3 0.4 0.5 0.6四个IO口为高,但是经过IO的模拟/数字配置,输入/输出配置,上拉/下拉配置之后,P0.3 0.4 0.6都能输出高,就P0.5始终输出为低。请问可能是什么原因呢,再就是zstack自带的初始化是在用户APP初始化之前还是之后呢,会不会是由于zstack的初始化在用户APP之后引起的呢?谢谢!

  • 下面的是我试过的方式一:
    #define LED_Switch1 P0_3            //mode A
    #define LED_Switch2 P0_4            //mode B
    #define LED_Switch3 P0_5            //mode C
    #define LED_Switch4 P0_2            //mode C
    
    #define Solution0   LED_Switch1=1;LED_Switch2=0;LED_Switch3=0;  //A    P0.3
    #define Solution1   LED_Switch1=1;LED_Switch2=1;LED_Switch3=0;  //B    P0.3+P0.4
    #define Solution2   LED_Switch1=0;LED_Switch2=1;LED_Switch3=0;  //C    P0.4
    #define Solution3   LED_Switch1=0;LED_Switch2=1;LED_Switch3=1;  //A+B  P0.4+P0.5
    #define Solution4   LED_Switch1=0;LED_Switch2=0;LED_Switch3=1;  //B+C  P0.5
    #define SolutionC   LED_Switch1=0;LED_Switch2=0;LED_Switch3=0;  //close all
    
    下面的是方式二:
    #define Solution0   P0 = 0x34; //A    P0.3
    #define Solution1   P0 = 0x24; //B    P0.3+P0.4
    #define Solution2   P0 = 0x2C; //C    P0.4
    #define Solution3   P0 = 0x08; //A+B  P0.4+P0.5
    #define Solution4   P0 = 0x18; //B+C  P0.5
    #define SolutionC   P0 = 0xFF; //close all  
    
    下面是对IO的初始化:
        PERCFG |= 0x43;		//timer1 io 备用2   
        P0SEL  = 0xC0;		//1:外设,0:普通IO;timer1 通道4 P0_6 0xcc for uart  0xc0 no uart  
    
        P0DIR |= 0x7C;              //0:输入,1:输出;
        
        P0INP &= 0x83;              //P0.5上拉 0上下拉,由2定。1000 0011 2,3,4,5,6上拉
        P2INP &= 0xDF;              //P0上拉 0上拉 1101 1111
        
        //P1口的0用于测试PWM用
        P1SEL |= 0x01;		//1:外设,0:普通IO;timer2 通道2 LED1 P1_0
        P1DIR |= 0x01;              //0:输入,1:输出;
        
        P0 |= 0x7C;                 // |0x7C初始化P0.2 0.3 .4 .5 .6为高 0111 1100
        
        //ADC设置
        APCFG = 0x80;              //P0.7用作模拟口
    
    下面是函数调用:
        switch(Data_Buf[3])
        {
          case 0:
          {
          Solution0;  
          }break;
          case 1:
          {
          Solution1;      
          }break;
          case 2:
          {
          Solution2;      
          }break;
          case 3:
          {
          Solution3;       
          }break;
          case 4:
          {
          Solution4;    
          }break;
                          
          default : 
          break;                           
        }
    
    现象是0.4始终为低,但是我如果去掉宏定义时的LED_Switch4(P0.2),那么就是0.5口始终为低。
  • 我们的协议栈的硬件平台是基于SmartRF05EB+CC2530EM来的,

    在协议栈里面

    P0.2用做UART_RX

    P0.3用作UART_TX

    P0.4用作UART_CTS

    P0.5用作SPI 的MOSI

    具体你可以在TI官网搜索SmartRF05EB,CC2530EM都能找到对应的user guide

  • 我用P0_0口作为输出口,该口在APP层文件下void GenericApp_Init(byte task_id)函数中写了P0_0=0;强制P0.0口复位,下面就没对P0.0再做处理,但是,在程序跑起来之后,P0_0自己又置一了,我怀疑是协议栈中对IO口的初始化在void GenericApp_Init(byte task_id)函数之后,请问,协议栈中对IO口处理的代码在哪里?