TI中文支持网
TI专业的中文技术问题搜集分享网站

关于C6000 CSL库中CHIP_FGET()和CHIP_FSET()的问题

我自己编写了一个文件,用到下面的函数:

 Uint32 IRQ_globalDisable()
 {
  Uint32 gie = CHIP_FGET(CSR,GIE);
  CHIP_FSET(CSR,GIE,0); 

  return gie;
}

 void IRQ_globalRestore(Uint32 gie)
 {
  CHIP_FSET(CSR,GIE,gie);
}

第一个问题:运行时在有CHIP_FSET()的行都会显示:function declared implicitly;我不知道原因出现在哪里?于是:

我看了一下C6000的CSL库,在这个库里面有个文件csl_chiphal.h,这个文件中有两个宏定义是:

#define CHIP_FGET(REG,FIELD)\
    _CHIP_##REG##_FGET(##FIELD),但这个没有找到再往下的定义,也就是说不知道 _CHIP_##REG##_FGET(##FIELD)的定义是什么?这个在哪里能找到吗?(其实知道这个宏定义是什么意思,只是现在出现上面那个waring,所以想找一下它清楚的定义在哪里)

第二个问题是,编译显示错误:#20 identifier "GIE" is undefined 。我想问一下,GIE是CSR寄存器中的一个位,这个还要定义吗?没有见过定义寄存器的某一个位的情况,而是直接使用这个位,

希望得到您的帮助,谢谢!

noaming:

你好,##是c语言里的连接符,就是将多个字符连接成一个字符串,你可以参考一下C语言里面的用法。

noaming:

警告信息 function declared implicitly,说明函数是隐含声明的,这里没有问题。

wang ziyou:

回复 noaming:

编译显示错误:#20 identifier "GIE" is undefined 。这个是什么问题呢?GIE怎么定义呢?

noaming:

GIE是CSR寄存器中的一个位,这个不能在程序中直接使用,你所引用的宏,也只是做了链接符,然后引用了定义。

  #define _CHIP_CSR_GIE_MASK           0x00000001u  #define _CHIP_CSR_GIE_SHIFT          0x00000000u  #define  CHIP_CSR_GIE_DEFAULT        0x00000000u  #define  CHIP_CSR_GIE_OF(x)          _VALUEOF(x)  #define  CHIP_CSR_GIE_0              0x00000000u  #define  CHIP_CSR_GIE_1              0x00000001u

wang ziyou:

回复 noaming:

您列举的关于这一个位的宏定义我已经包含到我的程序中去了,但为什么程序运行还是显示错误说GIE没有定义呢?对这个问题,我看了好几天不知道怎么解决,希望得到您的帮助,谢谢,

 gie = CHIP_FGET(CSR,GIE)

CHIP_FSET(CSR,GIE,0); 这两个函数我知道是什么意思,但是不知道怎么推导才能都用上您刚刚列举的这几个宏定义:

#define _CHIP_CSR_GIE_MASK           0x00000001u  #define _CHIP_CSR_GIE_SHIFT          0x00000000u  #define  CHIP_CSR_GIE_DEFAULT        0x00000000u  #define  CHIP_CSR_GIE_OF(x)          _VALUEOF(x)  #define  CHIP_CSR_GIE_0              0x00000000u  #define  CHIP_CSR_GIE_1              0x00000001u

如果用不到这几个宏定义的话,这个GIE位到底是怎么用的呢?

noaming:

回复 wang ziyou:

在C语言中不能直接配置CPU的寄存器,因为没有映射地址。你的情况还是推荐你使用CSL库提供的宏。

现在,你检查一下你程序的开头是否定义了:

#include <csl.h>

有了上面的头文件,就可以直接使用CSL提供的宏,来配置CSR的GIE了,如CHIP_FGET(CSR,GIE),CHIP_FSET(CSR,GIE,0)等。

noaming:

回复 wang ziyou:

加上这个头文件,可以编译通过了吗?

wang ziyou:

回复 noaming:

您好,我看了一下csl.h这个文件的内容是:

\******************************************************************************/#ifndef _CSL_H_#define _CSL_H_

#include <csl_chip.h>#include <csl_irq.h>#include <csl_timer.h>

/******************************************************************************\* scope and inline control macros\******************************************************************************/#ifdef __cplusplus#define CSLAPI extern "C" far #else#define CSLAPI extern far#endif

#undef  USEDEFS#undef  IDECL#undef  IDEF

#ifdef  _CSL_MOD_  #define IDECL CSLAPI  #define USEDEFS  #define IDEF#else  #ifdef  _INLINE    #define IDECL static inline    #define USEDEFS    #define IDEF  static inline  #else    #define IDECL CSLAPI  #endif#endif

/******************************************************************************\* global macro declarations\******************************************************************************/

/******************************************************************************\* global typedef declarations\******************************************************************************/

/* if this structure changes, be sure to also change it in csl_irq_.asm */typedef union {  struct {    Uint32 biosPresent;    _IRQ_Dispatch *dispatchTable;    Uint32 timerUsed;    Uint32 timerNum;  } args;  struct {    TIMER_Handle hTimer;    Uint32 *event2IntTbl;    Uint32 *int2EventTbl;  } ret;} _CSL_Config;/******************************************************************************\* global variable declarations\******************************************************************************/

/******************************************************************************\* global function declarations\******************************************************************************/CSLAPI void _CSL_init(_CSL_Config *config);

CSLAPI void CSL6201_LIB_();CSLAPI void CSL6202_LIB_();CSLAPI void CSL6203_LIB_();CSLAPI void CSL6204_LIB_();CSLAPI void CSL6205_LIB_();CSLAPI void CSL6211_LIB_();CSLAPI void CSL6701_LIB_();CSLAPI void CSL6711_LIB_();CSLAPI void CSL6712_LIB_();CSLAPI void CSL6713_LIB_();CSLAPI void CSLDA610_LIB_();CSLAPI void CSLDM642_LIB_();CSLAPI void CSLDM640_LIB_();CSLAPI void CSLDM641_LIB_();CSLAPI void CSL6412_LIB_();CSLAPI void CSL6414_LIB_();CSLAPI void CSL6415_LIB_();CSLAPI void CSL6416_LIB_();CSLAPI void CSL6711C_LIB_();CSLAPI void CSL6712C_LIB_();CSLAPI void CSL6411_LIB_();/* next two options are DRI300 versions */CSLAPI void CSL6410_LIB_();CSLAPI void CSL6413_LIB_();CSLAPI void CSL6418_LIB_();

/******************************************************************************\* inline function declarations\******************************************************************************/

/******************************************************************************\* special inline function\******************************************************************************/

/* This function checks to make sure that the correct library is being *//* linked in compared to the CHIP_XXXX definition.                     */

static inline void CSL_init() {

  #if (CHIP_6201)    CSL6201_LIB_();  #elif (CHIP_6202)    CSL6202_LIB_();  #elif (CHIP_6203)    CSL6203_LIB_();  #elif (CHIP_6204)    CSL6204_LIB_();  #elif (CHIP_6205)    CSL6205_LIB_();  #elif (CHIP_6211)    CSL6211_LIB_();   #elif (CHIP_6701)    CSL6701_LIB_();  #elif (CHIP_6711)    CSL6711_LIB_();  #elif (CHIP_6712)    CSL6712_LIB_();  #elif (CHIP_6713)    CSL6713_LIB_();  #elif (CHIP_DA610)    CSLDA610_LIB_();  #elif (CHIP_DM642)    CSLDM642_LIB_();  #elif (CHIP_DM640)    CSLDM640_LIB_();  #elif (CHIP_DM641)    CSLDM641_LIB_();  #elif (CHIP_6412)    CSL6412_LIB_();  #elif (CHIP_6414)    CSL6414_LIB_();  #elif (CHIP_6415)    CSL6415_LIB_(); #elif (CHIP_6416)    CSL6416_LIB_(); #elif (CHIP_6711C)    CSL6711C_LIB_();     #elif (CHIP_6712C)    CSL6712C_LIB_(); #elif (CHIP_6411)    CSL6411_LIB_();/* next three are DRI300 versions */ #elif (CHIP_6410)    CSL6410_LIB_(); #elif (CHIP_6413)    CSL6413_LIB_(); #elif (CHIP_6418)    CSL6418_LIB_(); #endif

  _CSL_init((_CSL_Config*)INV);}

/*—————————————————————————-*/

/******************************************************************************\* inline function definitions\******************************************************************************/#ifdef USEDEFS/*—————————————————————————-*//*—————————————————————————-*//*—————————————————————————-*/#endif /* USEDEFS */

#endif /* _CSL_H_ *//******************************************************************************\* End of csl.h\******************************************************************************/

 我现在编译运行是在simulator下面进行的,没有实际的板子,加这个头文件是必须在硬件板下进行编译运行吗?

noaming:

回复 wang ziyou:

编译的时候不需要连接硬件,就是说编译不需要硬件。仿真运行的时候才用到硬件。

noaming:

回复 wang ziyou:

头文件加上,错误消失了没,编译通过了没有?

赞(0)
未经允许不得转载:TI中文支持网 » 关于C6000 CSL库中CHIP_FGET()和CHIP_FSET()的问题
分享到: 更多 (0)