mirror of
https://github.com/cnlohr/lolra.git
synced 2026-06-21 18:29:28 +00:00
Compare commits
5 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 85fe805e32 | |||
| 6802a917ae | |||
| 39dbd6df19 | |||
| 591065938d | |||
| 0273cb8d94 |
@@ -0,0 +1,9 @@
|
||||
Trying to use a plain 003 to send and receive (one for each).
|
||||
|
||||
One generates a 12MHz tone.
|
||||
|
||||
The other samples at 48/47MHz.
|
||||
|
||||
This doesn't particularly work well.
|
||||
|
||||
It only goes about 1'
|
||||
@@ -60,6 +60,8 @@ SOFTWARE.
|
||||
uint32_t dmadata[DMA_SIZE/2] __attribute__((aligned(64)));
|
||||
|
||||
|
||||
uint32_t ercnt = 0;
|
||||
|
||||
#define IQDLEN 32
|
||||
int32_t lastintenR[IQDLEN], lastintenI[IQDLEN];
|
||||
uint32_t intenhead;
|
||||
@@ -79,6 +81,7 @@ void DMA1_Channel1_IRQHandler( void )
|
||||
static uint32_t * here = dmadata;
|
||||
static uint32_t thisintenR;
|
||||
static uint32_t thisintenI;
|
||||
static uint32_t rcnt;
|
||||
|
||||
// We have a pointer to the next data we want to analyize.
|
||||
// We have a pointer to where the tail of the new data is.
|
||||
@@ -91,22 +94,21 @@ void DMA1_Channel1_IRQHandler( void )
|
||||
// two. And we either reset the pointer to the beginning of
|
||||
// the array, OR, we stop because we ran out of data.
|
||||
|
||||
uint32_t cnt = DMA1_Channel1->CNTR;
|
||||
if( cnt == 0 ) cnt = 1;
|
||||
uint32_t tail_offset = DMA_SIZE - cnt;
|
||||
uint32_t * tail = dmadata + tail_offset/2; // Tuncate down to quads if a pair has not been fully written.
|
||||
uint32_t * stopat = (here < tail) ? tail : end;
|
||||
|
||||
do
|
||||
{
|
||||
uint32_t cnt = DMA1_Channel1->CNTR;
|
||||
if( cnt == 0 ) cnt = 1;
|
||||
uint32_t tail_offset = DMA_SIZE - cnt;
|
||||
uint32_t * tail = dmadata + tail_offset/2; // Tuncate down to quads if a pair has not been fully written.
|
||||
uint32_t * stopat = (here < tail) ? tail : end;
|
||||
|
||||
if( here == tail ) break;
|
||||
|
||||
do
|
||||
{
|
||||
int32_t vA = *(here++);
|
||||
int32_t vB = *(here++);
|
||||
thisintenR += (vA&0x3ff) - (vB >> 16);
|
||||
thisintenI += (vB&0x3ff) - (vA >> 16);
|
||||
thisintenR += (vA&0xfff) - (vB&0xfff);
|
||||
thisintenI += (vA >> 16) - (vB >> 16);
|
||||
rcnt++;
|
||||
} while( here != stopat );
|
||||
|
||||
|
||||
@@ -120,6 +122,8 @@ void DMA1_Channel1_IRQHandler( void )
|
||||
thisintenR = 0;
|
||||
thisintenI = 0;
|
||||
here = head;
|
||||
ercnt = rcnt;
|
||||
rcnt = 0;
|
||||
wordouts++;
|
||||
}
|
||||
|
||||
@@ -136,8 +140,6 @@ int main()
|
||||
|
||||
Delay_Ms( 100 );
|
||||
|
||||
funPinMode( ADC_PIN, GPIO_CFGLR_IN_ANALOG );
|
||||
|
||||
EXTEND->CTR = 1<<10; // LDO trim
|
||||
|
||||
funGpioInitAll();
|
||||
@@ -156,7 +158,7 @@ int main()
|
||||
// set sampling time for chl 7, 4, 3, 2
|
||||
// 0:7 => 3/9/15/30/43/57/73/241 cycles
|
||||
#ifdef USE_TIMER
|
||||
ADC1->SAMPTR2 = (0<<(3*ADCNO));
|
||||
ADC1->SAMPTR2 = (1<<(3*ADCNO));
|
||||
#else
|
||||
ADC1->SAMPTR2 = (3<<(3*ADCNO));
|
||||
#endif
|
||||
@@ -208,7 +210,7 @@ int main()
|
||||
#ifdef USE_TIMER
|
||||
|
||||
TIM2->PSC = 0x0000; // Prescalar
|
||||
TIM2->ATRLR = 49; // TIM2 max before reset. 48 = Period of 49 cycles.
|
||||
TIM2->ATRLR = 46; // TIM2 max before reset. 48 = Period of 49 cycles.
|
||||
TIM2->CHCTLR1 = TIM_OC1M_2 | TIM_OC1M_1 | TIM_OC1PE;
|
||||
TIM2->CTLR1 = TIM_ARPE;
|
||||
TIM2->CCER = TIM_CC1E | TIM_CC1P | TIM_CC1NP;
|
||||
@@ -224,9 +226,14 @@ int main()
|
||||
funPinMode( LEDPIN, GPIO_CFGLR_OUT_50Mhz_PP );
|
||||
//funPinMode( PD4, GPIO_CFGLR_OUT_50Mhz_AF_PP );
|
||||
|
||||
funPinMode( ADC_PIN,
|
||||
//GPIO_CFGLR_IN_PUPD
|
||||
GPIO_CFGLR_IN_ANALOG
|
||||
);
|
||||
|
||||
while(1)
|
||||
{
|
||||
// printf( "%5d %5d %d %d %d %d\n", (int)lastintenR[intenhead], (int)lastintenI[intenhead], dmadata[0]&0xfff, dmadata[0]>>16, dmadata[1]&0xfff, dmadata[1]>>16 );
|
||||
printf( "%5d %5d %ld %ld %ld %ld\n", (int)lastintenR[intenhead], (int)lastintenI[intenhead], dmadata[0]&0xfff, dmadata[0]>>16, dmadata[1]&0xfff, dmadata[1]>>16 );
|
||||
|
||||
int i;
|
||||
int32_t lR[8], lI[8];
|
||||
@@ -240,10 +247,10 @@ int main()
|
||||
|
||||
for( i = 0; i < 8; i++ )
|
||||
{
|
||||
printf( "%6d%6d\n", lR[i], lI[i] );
|
||||
printf( "%6ld%6ld\n", lR[i], lI[i] );
|
||||
}
|
||||
|
||||
printf( "%08x %d\n", dmadata[0], wordouts );
|
||||
printf( "%08lx %ld ** %d\n", dmadata[0], wordouts, ercnt );
|
||||
Delay_Ms( 1000 );
|
||||
|
||||
}
|
||||
|
||||
@@ -67,25 +67,26 @@ int main()
|
||||
|
||||
TIM2->PSC = 0x0000; // Prescalar
|
||||
TIM2->ATRLR = 3; // Max
|
||||
TIM2->CHCTLR1 = TIM_OC1M_2 | TIM_OC1M_1 | TIM_OC1PE;
|
||||
TIM2->CHCTLR1 = TIM_OC1M_2 | TIM_OC1M_1 | TIM_OC1PE | TIM_OC1FE;
|
||||
TIM2->CTLR1 = TIM_ARPE;
|
||||
TIM2->CCER = TIM_CC1E | TIM_CC1P | TIM_CC1NP;
|
||||
TIM2->SWEVGR = TIM_UG;
|
||||
|
||||
// Enable TIM2
|
||||
TIM2->CTLR1 |= TIM_CEN;
|
||||
TIM2->CH1CVR = 2;
|
||||
TIM2->CH1CVR = TIM2->ATRLR/2;
|
||||
|
||||
printf( "Going\n");
|
||||
while(1);
|
||||
|
||||
while(1)
|
||||
;
|
||||
/* {
|
||||
TIM2->CCER = TIM_CC1E | TIM_CC1P | TIM_CC1NP;
|
||||
funDigitalWrite( LEDPIN, 1 );
|
||||
Delay_Ms( 1000 );
|
||||
{
|
||||
TIM2->CH1CVR = 2;
|
||||
TIM2->CCER = TIM_CC1E | TIM_CC1P;
|
||||
funDigitalWrite( LEDPIN, 1 );
|
||||
Delay_Us( 1500 );
|
||||
TIM2->CCER = TIM_CC1E;
|
||||
TIM2->CH1CVR = 2;
|
||||
funDigitalWrite( LEDPIN, 0 );
|
||||
Delay_Ms( 1000 );
|
||||
}*/
|
||||
Delay_Us( 1500 );
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
Submodule ch32v/ch32v003fun updated: 627ddd3a6b...119924c0d9
@@ -81,6 +81,7 @@ volatile uint16_t adc_buffer[ADC_BUFFSIZE];
|
||||
void SetupADC()
|
||||
{
|
||||
// XXX TODO -look into PGA
|
||||
// XXX TODO - look into BUFEN and TKITUNE
|
||||
// XXX TODO - Look into tag-teaming the ADCs
|
||||
|
||||
// PDA is analog input chl 7
|
||||
|
||||
@@ -193,7 +193,10 @@ void SetupADC()
|
||||
while(ADC1->CTLR2 & ADC_CAL);
|
||||
|
||||
// ADC_SCAN: Allow scanning.
|
||||
ADC1->CTLR1 = ADC_Pga_64 | ADC_SCAN;
|
||||
ADC1->CTLR1 =
|
||||
//ADC_SCAN;
|
||||
ADC_Pga_16 | ADC_SCAN;
|
||||
//ADC_Pga_64 | ADC_SCAN;
|
||||
|
||||
|
||||
// Turn on DMA
|
||||
|
||||
Binary file not shown.
@@ -0,0 +1,13 @@
|
||||
all : flash
|
||||
|
||||
TARGET:=ch32v203tx
|
||||
TARGET_MCU:=CH32V203
|
||||
CH32V003FUN:=../ch32v003fun/ch32v003fun
|
||||
|
||||
EXTRA_CFLAGS:=-Wno-unused-function -I../../lib
|
||||
|
||||
include $(CH32V003FUN)/ch32v003fun.mk
|
||||
|
||||
flash : cv_flash
|
||||
clean : cv_clean
|
||||
|
||||
@@ -0,0 +1,93 @@
|
||||
/**
|
||||
|
||||
MIT-like-non-ai-license
|
||||
|
||||
Copyright (c) 2024 Charles Lohr "CNLohr"
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the two following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
In addition the following restrictions apply:
|
||||
|
||||
1. The Software and any modifications made to it may not be used for the
|
||||
purpose of training or improving machine learning algorithms, including but not
|
||||
limited to artificial intelligence, natural language processing, or data
|
||||
mining. This condition applies to any derivatives, modifications, or updates
|
||||
based on the Software code. Any usage of the Software in an AI-training dataset
|
||||
is considered a breach of this License.
|
||||
|
||||
2. The Software may not be included in any dataset used for training or
|
||||
improving machine learning algorithms, including but not limited to artificial
|
||||
intelligence, natural language processing, or data mining.
|
||||
|
||||
|
||||
3. Any person or organization found to be in violation of these restrictions
|
||||
will be subject to legal action and may be held liable for any damages
|
||||
resulting from such use.
|
||||
|
||||
If any term is unenforcable, other terms remain in-force.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
|
||||
**/
|
||||
|
||||
#include "ch32v003fun.h"
|
||||
#include <stdio.h>
|
||||
|
||||
#define LEDPIN PD6
|
||||
|
||||
int main()
|
||||
{
|
||||
SystemInit();
|
||||
|
||||
Delay_Ms( 100 );
|
||||
|
||||
|
||||
funGpioInitAll();
|
||||
RCC->APB1PCENR |= RCC_APB1Periph_TIM2;
|
||||
// PD4 = T2C1 on 003, PA0 on the 203.
|
||||
funPinMode( PA0, GPIO_CFGLR_OUT_50Mhz_AF_PP );
|
||||
funPinMode( PA1, GPIO_CFGLR_OUT_50Mhz_AF_PP );
|
||||
funPinMode( LEDPIN, GPIO_CFGLR_OUT_50Mhz_PP );
|
||||
|
||||
// Reset TIM2 to init all regs
|
||||
RCC->APB1PRSTR |= RCC_APB1Periph_TIM2;
|
||||
RCC->APB1PRSTR &= ~RCC_APB1Periph_TIM2;
|
||||
|
||||
TIM2->PSC = 0x0000; // Prescalar
|
||||
TIM2->ATRLR = 4; // loop = fclk / (atrlr+1)
|
||||
TIM2->CHCTLR1 = TIM_OC1M_2 | TIM_OC1M_1 | TIM_OC1PE | TIM_OC1FE;
|
||||
TIM2->CTLR1 = TIM_ARPE;
|
||||
TIM2->CCER = TIM_CC1E | TIM_CC1P | TIM_CC1NE;
|
||||
TIM2->SWEVGR = TIM_UG;
|
||||
|
||||
// Enable TIM2
|
||||
TIM2->CTLR1 |= TIM_CEN;
|
||||
TIM2->CH1CVR = TIM2->ATRLR/2+1;
|
||||
|
||||
printf( "Setup\n" );
|
||||
while(1)
|
||||
{
|
||||
TIM2->CH1CVR = 2;
|
||||
TIM2->CCER = TIM_CC1E | TIM_CC1P;
|
||||
funDigitalWrite( LEDPIN, 1 );
|
||||
Delay_Us( 2000 );
|
||||
TIM2->CCER = TIM_CC1E;
|
||||
TIM2->CH1CVR = 2;
|
||||
funDigitalWrite( LEDPIN, 0 );
|
||||
Delay_Us( 2000 );
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
#ifndef _FUNCONFIG_H
|
||||
#define _FUNCONFIG_H
|
||||
|
||||
#define FUNCONF_USE_DEBUGPRINTF 1
|
||||
#define FUNCONF_USE_UARTPRINTF 0
|
||||
#define FUNCONF_USE_HSE 1
|
||||
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user