Hallo, ich habe schon viel Erfahrung mit CortexM4, jedoch hänge ich gerade beim Kinetis MCU fest. Ich verwende den MKE14F256 und möchte das SPI in betrieb nehmen. Datenblatt / Refence Manuals gibts hier: http://www.nxp.com/products/microcontrollers-and-processors/arm-processors/kinetis-cortex-m-mcus/e-series-5v-robust-m0-plus-m4/kinetis-ke1xf-168mhz-performance-with-can-5v-microcontrollers-based-on-arm-cortex-m4:KE1xF?tab=Documentation_Tab So jetzt habe ich ein ähnliches Cookbook für einen ähnlichen MCU gefunden, der das LPSPI demonstriert. Seite 40 folgende. http://www.nxp.com/assets/documents/data/en/application-notes/AN5413.pdf Das ganze habe ich entsprechend umgesetzt.
1 | //configure port |
2 | PCC->CLKCFG[PCC_PORTD_INDEX]=PCC_CLKCFG_CGC(1); |
3 | PORTD->PCR[0]=PORT_PCR_MUX(3); |
4 | PORTD->PCR[1]=PORT_PCR_MUX(3); |
5 | PORTD->PCR[2]=PORT_PCR_MUX(3); |
6 | PORTD->PCR[3]=PORT_PCR_MUX(3); |
7 | |
8 | //Set FIRCDIV2 |
9 | //SCG->FIRCDIV=SCG_FIRCDIV_FIRCDIV2(1)|SCG_FIRCDIV_FIRCDIV1(1); |
10 | //configure |
11 | //PCC->CLKCFG[PCC_LPSPI1_INDEX]=0; |
12 | PCC->CLKCFG[PCC_LPSPI1_INDEX]=PCC_CLKCFG_CGC(1);//|PCC_CLKCFG_PCS(3); //Set fast irc clock |
13 | //CLOCK_SetIpSrc(kCLOCK_Lpspi1, kCLOCK_IpSrcFircAsync); |
14 | |
15 | //PCC->CLKCFG[PCC_LPUART1_INDEX]=PCC_CLKCFG_CGC(1); |
16 | CLOCK_SetIpSrc(kCLOCK_Lpspi1, kCLOCK_IpSrcSysPllAsync); |
17 | |
18 | LPSPI1->CR=0; |
19 | LPSPI1->IER=0; |
20 | LPSPI1->DER=0; |
21 | LPSPI1->CFGR0=0; |
22 | LPSPI1->CFGR1=LPSPI_CFGR1_MASTER(1); //Master mode |
23 | LPSPI1->TCR=LPSPI_TCR_CPOL(0)| |
24 | LPSPI_TCR_PRESCALE(2)| |
25 | LPSPI_TCR_PCS(0)| |
26 | LPSPI_TCR_LSBF(0)| |
27 | LPSPI_TCR_BYSW(0)| |
28 | LPSPI_TCR_CONT(0)|LPSPI_TCR_CONTC(0)| |
29 | LPSPI_TCR_RXMSK(0)| |
30 | LPSPI_TCR_TXMSK(0)| |
31 | LPSPI_TCR_WIDTH(0)| |
32 | LPSPI_TCR_FRAMESZ(15); |
33 | LPSPI1->CCR= LPSPI_CCR_SCKPCS(0)| |
34 | LPSPI_CCR_PCSSCK(1)| |
35 | LPSPI_CCR_DBT(8); |
36 | LPSPI1->FCR=LPSPI_FCR_RXWATER(0)| |
37 | LPSPI_FCR_TXWATER(3); |
38 | LPSPI1->CR= LPSPI_CR_DBGEN(1)|LPSPI_CR_MEN(1); |
39 | |
40 | } |
41 | |
42 | void LPSPI1_transmit_16bits(uint16_t send) { |
43 | while((LPSPI1->SR & LPSPI_SR_TDF_MASK)>>LPSPI_SR_TDF_SHIFT==0); |
44 | LPSPI1->TDR = send; |
45 | LPSPI1->SR |= LPSPI_SR_TDF_MASK; |
46 | } |
Fehlerbild: Ich kann ca. 8(?) mal schreiben und dann ist Fifo voll. Am Ausgang kommt nix an. Mein Verdacht sind irgendwie die CLKs, die nicht durchkommen. Sehr ihr was?