有关对BGA check的问题

chipsos   2009-10-11 13:32 楼主
最近遇到一个疑惑的问题:、
在我做的东东里有一步是对硬件及其相关进行检测,可是在对芯片的BGA信号(不知道这样说行不行) 进行检测的时候却老是不通过,下面是出错的地方:

BOOL DrvExioBitTstGpio(EXIO_PORTMAP io)
{
        PELDIO_GPIO_REG        pGPIO = (PELDIO_GPIO_REG)ELDIO_GPIO_A_REGS_UA;
        if( GPIO_BIT_TST(pGPIO+GET_EXIO_PHYS_PORT(io), GET_EXIO_PHYS_BIT(io)) ){
                return TRUE;
        } else {
                return FALSE;
        }
}

在上面的函数中返回了 FALSE 导致check 不过,也就是说GPIO_BIT_TST(pGPIO+GET_EXIO_PHYS_PORT(io), GET_EXIO_PHYS_BIT(io))  的返回值为 0
以下是GPIO_BIT_TST() 的相关定义:
#define        GPIO_BITS        (sizeof(ELDIO_GPIO_DATA_TYPE)*8)
#define        GPIO_BIT(N)        (1<<(N))
#define        GPIO_BIT_0        GPIO_BIT(0)
#define        GPIO_BIT_1        GPIO_BIT(1)
#define        GPIO_BIT_2        GPIO_BIT(2)
#define        GPIO_BIT_3        GPIO_BIT(3)
#define        GPIO_BIT_4        GPIO_BIT(4)
#define        GPIO_BIT_5        GPIO_BIT(5)
#define        GPIO_BIT_6        GPIO_BIT(6)
#define        GPIO_BIT_7        GPIO_BIT(7)
#define        GPIO_PNUM        GPIO_BIT(GPIO_BITS)
#define        GPIO_MASK        (GPIO_PNUM-1)

#define        GPIO_MSK(R,M)                (((PELDIO_GPIO_REG)(R))->data[(M)&GPIO_MASK])
#define        GPIO_GET_MSK(R,M)        ((ELDIO_GPIO_DATA_TYPE)GPIO_MSK(R,M))
#define        GPIO_GET(R)                        GPIO_GET_MSK(R,GPIO_MASK)
#define        GPIO_SET_MSK(R,M,D)        (GPIO_MSK(R,M)=(D))
#define        GPIO_SET(R,D)                GPIO_SET_MSK(R,GPIO_MASK,D)
#define        GPIO_MSK_CLR(R,M)        (GPIO_MSK(R,M)=0)
#define        GPIO_MSK_INV(R,M)        (GPIO_MSK(R,M)=~GPIO_MSK(R,M))
#define        GPIO_MSK_SET(R,M)        (GPIO_MSK(R,M)=GPIO_MASK)
#define        GPIO_BIT_CLR(R,B)        GPIO_MSK_CLR(R,GPIO_BIT(B))
#define        GPIO_BIT_INV(R,B)        GPIO_MSK_INV(R,GPIO_BIT(B))
#define        GPIO_BIT_SET(R,B)        GPIO_MSK_SET(R,GPIO_BIT(B))
#define        GPIO_BIT_TST(R,B)        GPIO_GET_MSK(R,GPIO_BIT(B))


根据定义GPIO_BIT_TST() 的功能是检测某个通用GPIO口的某个BIT位
pGPIO+GET_EXIO_PHYS_PORT(io)  这个应该是没有影响的 我这是E口(通用口为A到 T)
我觉得出错的地方就是  GET_EXIO_PHYS_BIT(io)的值 (io为0x20) (GET_EXIO_PHYS_BIT(io)是0 的话就说明是E0口?硬件就是这么接的,说明算出来是0应该就是对的啊,检测到了E0口是BGA信号,为什么返回FLASE????整不明白)

/*       
        7 --- 0:ELDIO Port      | 1:Extend Port
        6 -+- Physical I/O Port | Extend Out Port
        5  |  (GPIO_A - GPIO_T) | (0 - 1, 15)
        4  |
        3 -+
        2 -+- Physical I/O Bit
        1  |  (0 - 7)
        0 -+
*/
#define        EXIO_PORTMAP        BYTE
#define        EXIO_PHYS_DEF(EX,PORT,BIT)        (BYTE)(((EX)<<7)|((PORT)<<3)|(BIT))
#define        EXIO_PHYS_ELDIO(PORT,BIT)        EXIO_PHYS_DEF(0,PORT,BIT)
#define        EXIO_PHYS_EXIO(PORT,BIT)        EXIO_PHYS_DEF(1,PORT,BIT)
#define        EXIO_PHYS_NOP        EXIO_PHYS_DEF(1,15,7)
#if        ED_CD1 || ED_CD2
#define        EXIO_PHYS_(BIT)        EXIO_PHYS_EXIO((BIT)>>3,(BIT)&7)
#define        EXIO_PHYS_EQU_VIRT
#endif
#define        IS_EXIO_EXTEND(X)        ((X)&0x80)
#define        GET_EXIO_PHYS_PORT(X)        (((X)>>3)&0xF)
#define        GET_EXIO_PHYS_BIT(X)        ((X)&0x7)
#define        GET_EXIO_EXTEND_BIT(X)        ((X)&0x7F)


回复评论

暂无评论,赶紧抢沙发吧
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复