zyh_126

WM-g-rm-09的STM32读写代码

0
阅读(2840)
今天在网上买的WM-g-rm-09的芯片到货了,设计的pcb板也回了,准备焊接调试程序,悲催,WM-g-rm-09不好焊接,当初就想到这个问题,在网上找了些焊接方法,感觉,先镀锡,再一个腿的加锡应该可以,但是怕引脚没有对齐,pcb和底下接地的短路了。没有办法只有硬着头皮试下了。这是对寄存器WM-g-rm-09读写的驱动代码。由于工程太大了无法上传,只能上传一部分。
int Hw_WriteRegister(int nRegNo, PVOID pBuf, int nSize)
{
	PBYTE pCur, pEnd, pBufPos;
	PBYTE aData = ucSpiBuf;
	int nBufLen, nDmaLen, nResidue;

	GSPI_CS_ENABLE(pSpi);

	nResidue = nSize;
	pBufPos = (PBYTE)pBuf;

#if (/*defined(SPI_USE_DMA) || */defined(GSPI_USE_8BIT))
	aData[0] = HIBYTE(nRegNo) | 0x80;
	aData[1] = LOBYTE(nRegNo);
#else // else for 16BIT
	aData[1] = HIBYTE(nRegNo) | 0x80;
	aData[0] = LOBYTE(nRegNo);
#endif
	pCur = aData + 2;
	while (nResidue > 0) {
		pEnd = aData + HW_IODATA_SIZE;
		nBufLen = pEnd - pCur;
		if (nResidue < nBufLen) {
			nBufLen = nResidue;
			pEnd = pCur + nResidue;
		}
		while (pCur < pEnd) {
#if (/*defined(SPI_USE_DMA) || */defined(GSPI_USE_8BIT))
			pCur[1] = *pBufPos ++;
			pCur[0] = *pBufPos ++;
#else // else for 16BIT
			pCur[0] = *pBufPos ++;
			pCur[1] = *pBufPos ++;
#endif
			pCur += 2;
		}
		nDmaLen = pEnd - aData;
		if (Hw_Write(nDmaLen) != nDmaLen)
			break;
		nResidue -= nBufLen;
		pCur = aData;
	}

	GSPI_CS_DISABLE(pSpi);

	return nSize - nResidue;
}

int Hw_ReadRegister(int nRegNo, PVOID pBuf, int nSize)
{
	PBYTE pCur,pEnd,pBufPos;
	PBYTE aData = ucSpiBuf;
	int nBufLen,nDmaLen,nResidue;

	GSPI_CS_ENABLE(pSpi);

	nResidue = nSize;
	nDmaLen = (int)ucSpiDummyClk * 2 + 2;
	FillMemory(aData, 0xFF, nDmaLen);
#if (/*defined(SPI_USE_DMA) || */defined(GSPI_USE_8BIT))
	aData[0] = HIBYTE(nRegNo);
	aData[1] = LOBYTE(nRegNo);
#else // else for 16BIT
	aData[1] = HIBYTE(nRegNo);
	aData[0] = LOBYTE(nRegNo);
#endif
	if(Hw_Write(nDmaLen) == nDmaLen) {
		pBufPos = (PBYTE)pBuf;
		pCur = aData;
		while(nResidue > 0) {
			pEnd = aData + HW_IODATA_SIZE;
			nBufLen = pEnd - pCur;
			if(nResidue < nBufLen) {
				nBufLen = nResidue;
				pEnd = pCur + nResidue;
			}
			nDmaLen = pEnd - aData;
#ifndef GSPI_GPIO_MODE
			if(Hw_Read(nDmaLen) != nDmaLen)
				break;
#else
			while (nDmaLen --)
				*pCur ++ = (BYTE)GSPI_ReadByte(&Spi);
			pCur = aData;
#endif
			while(pCur < pEnd) {
#if (/*defined(SPI_USE_DMA) || */defined(GSPI_USE_8BIT))
				*pBufPos ++ = pCur[1];
				*pBufPos ++ = pCur[0];
#else // else for 16BIT
				*pBufPos ++ = pCur[0];
				*pBufPos ++ = pCur[1];
#endif
				pCur += 2;
			}
			nResidue -= nBufLen;
			pCur = aData;
		}
	}

	GSPI_CS_DISABLE(pSpi);

	return nSize;
}