PSoC™ 6 Forum Discussions
Hi,
We are using a CYB06445LQI-S3D42 device.
Starting with a default clock configuration worked well.
When we have tried to configure the system clocks according to our board design (we have an ECO), the BSP fails to initialize the clocks.
These are the parameters of the configurations. To note that exactly the same parameters work well on another project with exactly the same ECO but on PSOC63 (CY8C6347BZI).
The BSP fails in the clock initialization
Could you help me understand why and what to do?
Thanks
I'm failing to understand how systick timer ISR is being called when the project is generated by ModusToolbox.
Normally, when you setup the systick timer and enable its interrupt, Systick_Handler is called right from the interrupt vector. I can still see that Systick_Handler is the one in the startup_psoc6_02_cm4.s file. but looks like that it's not the actual function that services the systick interrupt. instead, Cy_SysTick_ServiceCallbacks function calls the functions that are registered by the user.
My question is that who and when and how the SysTick_Handler interrupt vector is changed? is it done by cortexM0 prebuild binary?
Thanks in advance.
Show Less
Hello~
I cannot download binary to my evkit board named CY8CKIT-062-WFI-BT after debugging.
So, I want to change the mode as recovery mode or bootloader mode with with pressing the some conbination buttons.
I cannot open CMSIS-DAP port IDE tool and it always display KITPROG3 update.
How can I handle this?
Many thanks
BRs
Show Less
Hello everyone, Happy New Year!! :))
I have a question for the PSoC 6, the board I'm using is the CY8CPROTO-063-BLE, and I want to make it work with low voltages, I know it can work with 3.3, 1.1 and 0.9 Volts, but I would like if there is possible to achieve it from the PSoC Creator program, as I know that soldering some pins is possible, but I'm wondering if there is a way without touching the hardware.
I learned that in PSoC Creator in the part of the System you can change in Operating conditions the Power mode from 1.1 to 0.9, even it says the VDD 3.3, do you think is possible to change that to 1.1 and 0.9 respectively and take this action as an undervoltage? Or is this not possible?
Thanks in advance,
Gio
Show LessHow to perform RF measurements of CYW43439 in CY8CPROTO-062S2-43439?
For an external antenna, I've removed the R15, added R11 and added an antenna connector at JI.
But on doing TX tests, transmitting packet engines, I'm not seeing any power in the power meter. Also associating the kit with another device the RSSI is also very poor(-91).
How to resolve this and perform RF measurements of CYW43439.
Show Less
Hi, i'm working with a CYPROTO-062-4343W PSoC6 Wi-Fi BT PROTOTYPING KIT and i'm trying to write a firmware to get capacitance and send the measurement through UART, but the code doesn't work on MODUS TOOLBOX, so i'm asking if there are any example codes for these type of operation?
Thanks in advance.
Here attached the code.
Show LessHello,
I have successfully implemented the functionality of my project using Capsense (MatrixButtons) and have seen good results in Tuner and can print the results using Tera Term. Now I need to use the BLE component in order to implement these. I tried the Example Code for CE218137_BLE_Proximity_RTOS, and I was thinking that Proximity is also a feature of Capsense, and I thought that maybe I could just refer to it to implement my functionality? Or is there a better example code I can learn from?
Using CE218137_BLE_Proximity_RTOS as an example, I can successfully connect and see the values change at CySmart. But what I want is to print them in the serial port and see them from the Tuner, not just see a value from CySmart; because we need to print them for subsequent personalized data processing and visualization. Is this something that can be realized? I need to be pointed in the right direction as there is so much BLE sample code and manuals here.
Thanks for your help!
Best regards.
Show Less
Hi. I'm trying to transfer an array to SPI peripheral using DMA on a psco6 (CY8CKIT-062-BT-WIFI).
The array length is a large arbitrary number that doesn't fit as a 2D transfer. let's say 643 bytes.
My idea is to divide it into two descriptor and chain them. i.e. first descriptor transfers 10x64 bytes, and second descriptor transfers 3 bytes. ( I'm not sure if there's any other way.)
The problem that I have is that it doesn't start the second descriptor. here is the code that I'm trying to get working:
#define txDma_ENABLED 1U
#define txDma_HW DW0
#define txDma_CHANNEL 2U
#define txDma_IRQ cpuss_interrupts_dw0_2_IRQn
/* Interrupt priority for TXDMA */
#define TXDMA_INTERRUPT_PRIORITY (7u)
volatile bool tx_dma_done = false;
cy_stc_dma_descriptor_t txDma_Descriptor_1 =
{
.ctl = 0UL,
.src=0UL,
.dst = 0UL,
.xCtl = 0UL,
.yCtl = 0UL,
.nextPtr = 0UL,
};
cy_stc_dma_descriptor_t txDma_Descriptor_0 =
{
.ctl = 0UL,
.src=0UL,
.dst = 0UL,
.xCtl = 0UL,
.yCtl = 0UL,
.nextPtr = 0UL,
};
const cy_stc_dma_descriptor_config_t txDma_Descriptor_0_config =
{
.retrigger = CY_DMA_RETRIG_IM,
.interruptType = CY_DMA_DESCR_CHAIN,
.triggerOutType = CY_DMA_1ELEMENT,
.channelState = CY_DMA_CHANNEL_DISABLED,
.triggerInType = CY_DMA_1ELEMENT,
.dataSize = CY_DMA_BYTE,
.srcTransferSize = CY_DMA_TRANSFER_SIZE_DATA,
.dstTransferSize = CY_DMA_TRANSFER_SIZE_WORD,
.descriptorType = CY_DMA_2D_TRANSFER,
.srcAddress = NULL,
.dstAddress = NULL,
.srcXincrement = 1,
.dstXincrement = 0,
.xCount = 1,
.srcYincrement = 0,
.dstYincrement = 0,
.yCount = 1,
.nextDescriptor = 0UL,
};
const cy_stc_dma_channel_config_t txDma_channelConfig =
{
.descriptor = &txDma_Descriptor_0,
.preemptable = false,
.priority = 3,
.enable = false,
.bufferable = false,
};
const uint8_t small_buffer[10]={0xA1,0xB2,0xC3};
uint32_t configure_tx_dma(uint8_t* tx_buffer)
{
cy_en_dma_status_t dma_init_status;
const cy_stc_sysint_t intTxDma_cfg =
{
.intrsrc=txDma_IRQ,
.intrPriority = 7u
};
/* Initialize descriptor */
dma_init_status = Cy_DMA_Descriptor_Init(&txDma_Descriptor_0, &txDma_Descriptor_0_config);
Cy_DMA_Descriptor_SetXloopSrcIncrement(&txDma_Descriptor_0, 1);
Cy_DMA_Descriptor_SetYloopSrcIncrement(&txDma_Descriptor_0, 64);
Cy_DMA_Descriptor_SetXloopDataCount(&txDma_Descriptor_0, 64);
Cy_DMA_Descriptor_SetYloopDataCount(&txDma_Descriptor_0, 10);
Cy_DMA_Descriptor_SetNextDescriptor(&txDma_Descriptor_0, &txDma_Descriptor_1);
dma_init_status = Cy_DMA_Descriptor_Init(&txDma_Descriptor_1, &txDma_Descriptor_0_config);
Cy_DMA_Descriptor_SetXloopSrcIncrement(&txDma_Descriptor_1, 1);
Cy_DMA_Descriptor_SetYloopSrcIncrement(&txDma_Descriptor_1, 3);
Cy_DMA_Descriptor_SetXloopDataCount(&txDma_Descriptor_1, 3);
Cy_DMA_Descriptor_SetYloopDataCount(&txDma_Descriptor_1, 1);
Cy_DMA_Descriptor_SetNextDescriptor(&txDma_Descriptor_1, 0UL);
if (dma_init_status!=CY_DMA_SUCCESS)
{
return INIT_FAILURE;
}
dma_init_status = Cy_DMA_Channel_Init(txDma_HW, txDma_CHANNEL, &txDma_channelConfig);
if (dma_init_status!=CY_DMA_SUCCESS)
{
return INIT_FAILURE;
}
/* Set source and destination for descriptor 1 */
Cy_DMA_Descriptor_SetSrcAddress(&txDma_Descriptor_0, tx_buffer);
Cy_DMA_Descriptor_SetDstAddress(&txDma_Descriptor_0, (void *)&SCB6->TX_FIFO_WR);
Cy_DMA_Descriptor_SetSrcAddress(&txDma_Descriptor_1, small_buffer);
Cy_DMA_Descriptor_SetDstAddress(&txDma_Descriptor_1, (void *)&SCB6->TX_FIFO_WR);
/* Initialize and enable the interrupt from TxDma */
Cy_SysInt_Init(&intTxDma_cfg, &tx_dma_complete);
NVIC_EnableIRQ((IRQn_Type)intTxDma_cfg.intrSrc);
/* Enable DMA interrupt source. */
Cy_DMA_Channel_SetInterruptMask(txDma_HW, txDma_CHANNEL, CY_DMA_INTR_MASK);
/* Enable DMA block to start descriptor execution process */
Cy_DMA_Enable(txDma_HW);
return INIT_SUCCESS;
}
void tx_dma_complete(void)
{
/* Check tx DMA status */
if ((CY_DMA_INTR_CAUSE_COMPLETION != Cy_DMA_Channel_GetStatus(txDma_HW, txDma_CHANNEL)) &&
(CY_DMA_INTR_CAUSE_CURR_PTR_NULL != Cy_DMA_Channel_GetStatus(txDma_HW, txDma_CHANNEL)))
{
/* DMA error occurred while TX operations */
//handle_error();
}
tx_dma_done = true;
/* Clear tx DMA interrupt */
Cy_DMA_Channel_ClearInterrupt(txDma_HW, txDma_CHANNEL);
}
void spi_dma_transfer()
{
Cy_DMA_Channel_SetDescriptor(txDma_HW, txDma_CHANNEL,&txDma_Descriptor_0);
Cy_DMA_Channel_Enable(txDma_HW, txDma_CHANNEL);
}
Show Less
Hi.
I'm using
cyhal_spi_transfer(cyhal_spi_t *obj, const uint8_t *tx, size_t tx_length, uint8_t *rx, size_t rx_length, uint8_t write_fill)
function to transfer a larg bunch of data (1250 bytes) over spi. it works very well if I have a tx buffer and a rx buffer.
However, If I just wanna use this function to receive same amount of b
bytes by doing:
cyhal_spi_transfer(&mSPI, NULL, 0, rx_buffer, 1250, 0xff);
it will have two long pauses in the middle:
it sends 1 byte, then pause, then send 1248 bytes, then pause, then another single byte.
Is there any work around for this? (except having a dummy tx buffer (I'm already doing it))
I'm running on cy8cking-062s2-43012 kit. SPI 6 on P12 at 25MHz master. CPU and clocks at 100MHz,
Show Less