Ik ben bezig met een driver te schrijven voor SPI op een baremetal board (frdm-k64f). Ik heb momenteel enkel nog maar de initialisatie geschreven. Ik had deze al graag getest met mijn osciloscoop, daarom heb ik de bit in het Continious Clock register aan gezet. Echter er verschijnt geen clock. Betekent Continious Clock niet wat ik denk dat het betekent?
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
| int frdm_spi_init(SPI_Type *spi, struct frdm_spi_mode *mode, uint32_t hz) {
if(mode->frame < FRDM_SPI_MIN_FRAME_SIZE) {
return -1;
}
// Enable clock
SIM_SCGC6 |= SIM_SCGC6_SPI0(FRDM_ENABLE);
// For debug purpose
SPI_MCR_REG(spi) &= ~SPI_MCR_CONT_SCKE_MASK;
SPI_MCR_REG(spi) |= (FRDM_ENABLE<<SPI_MCR_CLR_RXF_SHIFT);
// Master/slave
SPI_MCR_REG(spi) &= ~SPI_MCR_MSTR_MASK;
SPI_MCR_REG(spi) |= (mode->mode<<SPI_MCR_MSTR_SHIFT);
if(mode->mode == FRDM_SPI_MASTER) {
//Frame size
SPI_CTAR_REG(spi,0) &= ~SPI_CTAR_FMSZ_MASK;
SPI_CTAR_REG(spi,0) |= (((mode->frame-1) & 0x0F)<<SPI_CTAR_FMSZ_SHIFT);
// Spi mode
SPI_CTAR_REG(spi,0) &= ~SPI_CTAR_CPOL_MASK;
SPI_CTAR_REG(spi,0) |= (mode->CPOL)<<SPI_CTAR_CPOL_SHIFT;
SPI_CTAR_REG(spi,0) &= ~SPI_CTAR_CPHA_MASK;
SPI_CTAR_REG(spi,0) |= (mode->CPHA)<<SPI_CTAR_CPHA_SHIFT;
//Always in msb mode
SPI_CTAR_REG(spi,0) &= ~SPI_CTAR_LSBFE_MASK;
} else if(mode->mode == FRDM_SPI_SLAVE) {
/*TODO*/
}
//frequency
SPI_CTAR_REG(spi,0) &= ~SPI_CTAR_ASC_MASK;
SPI_CTAR_REG(spi,0) |= 1<<SPI_CTAR_ASC_SHIFT;
SPI_CTAR_REG(spi,0) &= ~SPI_CTAR_PASC_MASK; SPI_CTAR_REG(spi,0) |= 0<<SPI_CTAR_PASC_SHIFT;
SPI_CTAR_REG(spi,0) &= ~SPI_CTAR_DBR_MASK;
SPI_CTAR_REG(spi,0) |= 0<<SPI_CTAR_DBR_SHIFT;
// Fifo
SPI_MCR_REG(spi) &= ~SPI_MCR_DIS_TXF_MASK;
SPI_MCR_REG(spi) |= 0<<SPI_MCR_DIS_TXF_SHIFT;
//Enable
SPI_MCR_REG(spi) &= ~SPI_MCR_MDIS_MASK;
SPI_MCR_REG(spi) |= 0<<SPI_MCR_MDIS_SHIFT;
// Start hardware
SPI_MCR_REG(spi) &= ~SPI_MCR_HALT_MASK;
SPI_MCR_REG(spi) |= 0<<SPI_MCR_HALT_SHIFT;
return 0;
} |