yefj
Advanced Member level 5
Hello,I am sending a sequence as shown bellow MSB first order(EFR32)
but when i look at the sequence displayed on osciloscope shown bellow, i see 111 from the left end and 11 from the right end it doesnt match the sequence i am sending .
the attached code shown bellow.
Where did i go wrong?
Thanks.
but when i look at the sequence displayed on osciloscope shown bellow, i see 111 from the left end and 11 from the right end it doesnt match the sequence i am sending .
the attached code shown bellow.
Where did i go wrong?
Thanks.
Code:
#include <stdint.h>
#include <stdbool.h>
#include "bsp.h"
#include "bsp_trace.h"
#include "em_emu.h"
#include "em_device.h"
#include "em_chip.h"
#include "em_cmu.h"
#include "em_gpio.h"
#include "em_usart.h"
#include "em_ldma.h"
#define TX_WREN_BUFFER_SIZE 1
#define TX_WRSR_BUFFER_SIZE 4
#define TX_RDSR_BUFFER_SIZE 1
#define RX_BUFFER_SIZE 1
uint8_t Tx_WREN[TX_WREN_BUFFER_SIZE] = {0x06};//write enable command
uint8_t Tx_WRSR[TX_WRSR_BUFFER_SIZE] = {0x01,0x2F,0xEF,0xD8}; //write status register
uint8_t Tx_RDSR[TX_RDSR_BUFFER_SIZE] = {0x05}; //read status register
uint32_t TxBufferIndex = 0;
uint32_t RxBuffer;
//uint32_t RxBufferIndex = 0;
volatile uint32_t msTicks; /* counts 1ms timeTicks */
void Delay(uint32_t dlyTicks);
void SysTick_Handler(void)
{
msTicks++; /* increment counter necessary in Delay()*/
}
void Delay(uint32_t dlyTicks)
{
uint32_t curTicks;
curTicks = msTicks;
while ((msTicks - curTicks) < dlyTicks) ;
}
int main(void)
{
CHIP_Init();
CMU_ClockEnable(cmuClock_GPIO, true);
CMU_ClockEnable(cmuClock_USART1, true);
CMU_ClockEnable(cmuClock_USART0, true);
// Configure GPIO mode
GPIO_PinModeSet(gpioPortC, 8, gpioModePushPull, 0); // US1_CLK is push pull
GPIO_PinModeSet(gpioPortA, 4, gpioModePushPull, 1); // US1_CS is push pull
GPIO_PinModeSet(gpioPortC, 6, gpioModePushPull, 1); // US1_TX (MOSI) is push pull
GPIO_PinModeSet(gpioPortC, 7, gpioModeInput, 1); // US1_RX (MISO) is input
// Start with default config, then modify as necessary
USART_InitSync_TypeDef config = USART_INITSYNC_DEFAULT;
config.master = true; // master mode
config.baudrate = 1000000; // CLK freq is 1 MHz
config.autoCsEnable = false; // CS pin controlled by firmware, not hardware
config.clockMode = usartClockMode0; // clock idle low, sample on rising/first edge
config.msbf = true; // send MSB first
config.enable = usartDisable; // Make sure to keep USART disabled until it's all set up
USART_InitSync(USART1, &config);
USART_InitAsync_TypeDef init = USART_INITASYNC_DEFAULT;
// set pin modes for UART TX and RX pins
GPIO_PinModeSet(gpioPortA, 1, gpioModeInput, 1);
GPIO_PinModeSet(gpioPortA, 0, gpioModePushPull, 1);
///////////////////////////////////
USART_InitAsync(USART0, &init);
USART0->ROUTELOC0 =(USART_ROUTELOC0_TXLOC_LOC0) | // US1_TX (MOSI) on location 11 = PC6 per datasheet section 6.4 = EXP Header pin 4
(USART_ROUTELOC0_RXLOC_LOC0); // US1_RX (MISO) on location 11 = PC7 per datasheet section 6.4 = EXP Header pin 6
// Set USART pin locations
USART1->ROUTELOC0 = (USART_ROUTELOC0_CLKLOC_LOC11) | // US1_CLK on location 11 = PC8
(USART_ROUTELOC0_CSLOC_LOC11) | // US1_CS Manual
(USART_ROUTELOC0_TXLOC_LOC11) | // US1_TX (MOSI) on location 11 = PC6
(USART_ROUTELOC0_RXLOC_LOC11); // US1_RX (MISO) on location 11 = PC7
// Enable USART pins
USART1->ROUTEPEN = USART_ROUTEPEN_CLKPEN | USART_ROUTEPEN_TXPEN | USART_ROUTEPEN_RXPEN;
// Enable USART1
USART_Enable(USART1, usartEnable);
TxBufferIndex = 0;
if (SysTick_Config(CMU_ClockFreqGet(cmuClock_CORE) / 1000)) {
while (1) ;
}
USART1->IEN = USART_IEN_TXC; //enable TXC interrupt flag
while(1)
{
Delay(1);
GPIO_PinOutClear(gpioPortA,4);
USART_Tx(USART1, Tx_WRSR[0]);
while( !(USART1->STATUS & USART_STATUS_TXC) ); //wait TILL TXC goes high
USART_Tx(USART1, Tx_WRSR[1]);
while( !(USART1->STATUS & USART_STATUS_TXC) ); //wait TILL TXC goes high
USART_Tx(USART1, Tx_WRSR[2]);
while( !(USART1->STATUS & USART_STATUS_TXC) ); //wait TILL TXC goes high
USART_Tx(USART1, Tx_WRSR[3]);
while( !(USART1->STATUS & USART_STATUS_TXC) ); //wait TILL TXC goes high
GPIO_PinOutSet(gpioPortA,4);
Delay(1);
}
}
Last edited: