Further progress on DMA. The radio is now "usable" with it turned on. There is a whole lot of weird corruption to the graphics... anyway, it's progress and I want to make sure it's saved.
This commit is contained in:
parent
14d70c8afd
commit
c9e7284a9f
5 changed files with 6066 additions and 4776 deletions
10750
Source/Debug/PSDR.hex
10750
Source/Debug/PSDR.hex
File diff suppressed because it is too large
Load diff
|
@ -412,16 +412,32 @@ void Adafruit_GFX_drawColorBitmap(int16_t x, int16_t y, uint16_t *bitmap, int16_
|
|||
uint8_t txBuf[10];
|
||||
|
||||
//HAL_SPI_Transmit(&SpiHandle, bitmap, 1 /*cnt * 2*/, 1);
|
||||
|
||||
//Using DMA is going to mean that I can't alter the image, so for now we'll
|
||||
//use different code when using the tintMask
|
||||
if(tintMask == 0xFFFF)
|
||||
{
|
||||
HAL_SPI_Transmit_DMA(&SpiHandle, bitmap, w*h*2);
|
||||
while(SpiHandle.State != HAL_SPI_STATE_READY);
|
||||
}
|
||||
else
|
||||
{
|
||||
for(i = 0; i < w*h; i++)
|
||||
{
|
||||
txBuf[0] = (bitmap[i] & tintMask ) >> 8;
|
||||
txBuf[1] = (bitmap[i] & tintMask ) & 0xFF;
|
||||
//spi_readWrite(SpiHandle, rxBuf, bitmap, w*h);
|
||||
HAL_SPI_Transmit(&SpiHandle, txBuf, 2 /*cnt * 2*/, 1);
|
||||
//HAL_SPI_Transmit(&SpiHandle, txBuf, 2 /*cnt * 2*/, 1);
|
||||
HAL_SPI_Transmit_DMA(&SpiHandle, txBuf, 2);
|
||||
//HAL_SPI_Transmit(&SpiHandle, bitmap[i+1], 1 /*cnt * 2*/, 1);
|
||||
//}
|
||||
//SET_BIT(csport, cspinmask);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
HAL_GPIO_WritePin(LCD_NSS.port, LCD_NSS.pin, 1);
|
||||
|
||||
|
|
|
@ -65,7 +65,7 @@
|
|||
// int _height = ILI9340_TFTHEIGHT; //320
|
||||
uint16_t rxBuf[10];
|
||||
uint16_t txBuf[2];
|
||||
uint8_t txBuf2[320 * 240 * 2];
|
||||
//uint8_t txBuf2[320 * 240 * 2];
|
||||
|
||||
// Constructor when using hardware SPI. Faster, but must use SPI pins
|
||||
// specific to each board type (e.g. 11,13 for Uno, 51,52 for Mega, etc.)
|
||||
|
@ -570,9 +570,10 @@ void Adafruit_ILI9340_fillRect(int16_t x, int16_t y, int16_t w, int16_t h,
|
|||
//txBuf[0] = hi;
|
||||
//txBuf[1] = lo;
|
||||
uint32_t totalPixels = h * w;
|
||||
//uint8_t txBuf2[totalPixels * 2];
|
||||
uint8_t txBuf2[totalPixels * 2];
|
||||
|
||||
for(uint32_t i = 0; i < totalPixels; i+=2)
|
||||
//while(SpiHandle.State != HAL_SPI_STATE_READY);
|
||||
for(uint32_t i = (totalPixels * 2); i > 0; i-=2)
|
||||
{
|
||||
//txBuf2[i] = color;
|
||||
txBuf2[i] = color >> 8;
|
||||
|
@ -580,20 +581,36 @@ void Adafruit_ILI9340_fillRect(int16_t x, int16_t y, int16_t w, int16_t h,
|
|||
}
|
||||
|
||||
|
||||
//uint32_t txBuf2Address = &txBuf2;
|
||||
//uint32_t txBuf2AddressEnd = txBuf2Address + (320 * 240* 2);
|
||||
|
||||
//for()= color;
|
||||
|
||||
|
||||
//txBuf2[153000] = 0xFF;
|
||||
//txBuf2[150000] = 0xFF;
|
||||
|
||||
|
||||
//spi_readWrite(SpiHandle, rxBuf, txBuf, 1);
|
||||
//hdma_tx.Init.MemInc = DMA_MINC_DISABLE;
|
||||
//HAL_DMA_Init(&hdma_tx);
|
||||
|
||||
|
||||
HAL_SPI_Transmit_DMA(&SpiHandle, &txBuf2, 0xFFFF);
|
||||
while(SpiHandle.State == HAL_SPI_STATE_BUSY_TX);
|
||||
//HAL_SPI_Transmit_DMA(&SpiHandle, &txBuf2, 0xFFFF);
|
||||
//while(SpiHandle.State == HAL_SPI_STATE_BUSY_TX);
|
||||
//uint32_t pixelsWritten = 0;
|
||||
//utin16_t pixelsInBurst = 0;
|
||||
uint16_t fullPasses = (totalPixels * 2) / 0xFFFF;
|
||||
uint16_t partialPass = (totalPixels * 2) % 0xFFFF;
|
||||
uint32_t offset = 0;
|
||||
while(fullPasses > 0)
|
||||
{
|
||||
HAL_SPI_Transmit_DMA(&SpiHandle, txBuf2 + offset, 0xFFFF); //txBuf2 or &txBuf2 doesn't seem to make a difference
|
||||
fullPasses--;
|
||||
offset+=0xFFFF;
|
||||
while(SpiHandle.State != HAL_SPI_STATE_READY);
|
||||
}
|
||||
if(partialPass > 0)
|
||||
{
|
||||
HAL_SPI_Transmit_DMA(&SpiHandle, txBuf2 + offset, partialPass); //txBuf2 or &txBuf2 doesn't seem to make a difference
|
||||
while(SpiHandle.State != HAL_SPI_STATE_READY);
|
||||
}
|
||||
//HAL_Delay(1000);
|
||||
|
||||
|
||||
|
|
|
@ -1068,13 +1068,15 @@ setFreq(vfoAFrequency);
|
|||
drawNumber('3', 0,0, 0xFFFF);
|
||||
Adafruit_GFX_fillScreen(ILI9340_BLACK);
|
||||
|
||||
while(1)
|
||||
{
|
||||
//while(1)
|
||||
// {
|
||||
// drawNumber('3', 0,0, 0xFFFF);
|
||||
Adafruit_GFX_fillScreen(ILI9340_BLUE);
|
||||
// Adafruit_GFX_fillScreen(ILI9340_GREEN);
|
||||
// drawNumber('3', 5,5, 0xFFFF);
|
||||
Adafruit_GFX_fillScreen(ILI9340_RED);
|
||||
}
|
||||
// //Adafruit_GFX_fillScreen(ILI9340_BLACK);
|
||||
// Adafruit_GFX_fillScreen(ILI9340_RED);
|
||||
// Adafruit_GFX_fillScreen(ILI9340_BLUE);
|
||||
// }
|
||||
|
||||
Adafruit_GFX_setTextSize(3);
|
||||
Adafruit_GFX_setTextWrap(1);
|
||||
|
|
|
@ -150,7 +150,8 @@ void spi_readWrite(SPI_HandleTypeDef SpiH, uint16_t* rxBuf, uint16_t* txBuf, uin
|
|||
//HAL_SPI_TransmitReceive(&SpiHandle, txBuf, rxBuf, cnt, 1000);
|
||||
//HAL_SPI_Transmit(&SpiHandle, txTmp, 2 /*cnt * 2*/, 1);
|
||||
//while(HAL_SPI_GetState(&SpiH) != HAL_SPI_STATE_READY);
|
||||
HAL_SPI_Transmit_DMA(&SpiHandle, txTmp, cnt);
|
||||
HAL_SPI_Transmit_DMA(&SpiHandle, txTmp, 2/*cnt*/);
|
||||
while(SpiHandle.State != HAL_SPI_STATE_READY);
|
||||
//while(HAL_SPI_GetState(&SpiH) != HAL_SPI_STATE_READY);
|
||||
|
||||
// //High, second edge
|
||||
|
|
Loading…
Reference in a new issue