Forum: Mikrocontroller und Digitale Elektronik Hilfe beim CS42L52 Stereo Codec


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von D.-Chr. G. (wasyl)


Bewertung
0 lesenswert
nicht lesenswert
Mahlzeit,

ich bin gerade dabei, den CS42L52 per I2C anzusteuern. Unter Punkt 4.11 
des Datenblattes ( 
https://d3uzseaevmutz1.cloudfront.net/pubs/proDatasheet/CS42L52_F2.pdf#G6122857 
) wird aufgezeigt, wie der CS42L52 initialisiert wird. Meine Frage hier 
ist Folgende.
Wieso soll ich das Register 0x3E beschreiben, ohne dessen Beschreibung 
im Datenblatt zu finden? Ist das bei einigen Bauteilen so? Ich folge 
ungern den Anweisungen unter 4.11, ohne zu wissen wofür die einzelnen 
Bits in den Registern sorgen.


Grüße

: Bearbeitet durch User
von Matthias S. (Firma: matzetronics) (mschoeldgen)


Bewertung
0 lesenswert
nicht lesenswert
Dennis-Christian G. schrieb:
> Wieso soll ich das Register 0x3E beschreiben, ohne dessen Beschreibung
> im Datenblatt zu finden?

Tja, ist beim CS43L22 des STM32F4 Discovery Boards auch so. Man soll da 
undokumentierte Register beschreiben und was soll ich sagen - es 
funktioniert. Wie man sowas herausfindet, ist mir aber nicht bekannt.

von Georg A. (georga)


Bewertung
0 lesenswert
nicht lesenswert
Wo ist das Problem? Wenn der Chip-Hersteller das selbst sagt, dann ist 
es halt so...

von D.-Chr. G. (wasyl)


Bewertung
0 lesenswert
nicht lesenswert
Matthias S. schrieb:
> Dennis-Christian G. schrieb:
>> Wieso soll ich das Register 0x3E beschreiben, ohne dessen Beschreibung
>> im Datenblatt zu finden?
>
> Tja, ist beim CS43L22 des STM32F4 Discovery Boards auch so. Man soll da
> undokumentierte Register beschreiben und was soll ich sagen - es
> funktioniert. Wie man sowas herausfindet, ist mir aber nicht bekannt.

Vielen Dank. Habe meinen Code jetzt fertig, komischerweise läuft weder 
über die SDA noch über die SCL Line ein Signal. Beides ist permanent 
high wenn ich mit nem Oszi messe. Erstellt habe ich das Projekt per 
CubeHAL, demnach dürften alle Clocks für die notwendigen Peripherien 
aktiviert sein.

von Mampf F. (mampf) Benutzerseite


Bewertung
0 lesenswert
nicht lesenswert
Dennis-Christian G. schrieb:
> Erstellt habe ich das Projekt per
> CubeHAL, demnach dürften alle Clocks für die notwendigen Peripherien
> aktiviert sein.

Poste mal die Initialisierung der GPIOs und der I2C Schnittstelle.

Oft fehlen irgendwelche Alternate-Function-Mappings oder sowas ...

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Bewertung
0 lesenswert
nicht lesenswert
Dennis-Christian G. schrieb:
> Erstellt habe ich das Projekt per
> CubeHAL

Da kann ich nicht helfen - SPL hat bei mir immer reichen müssen.

von D.-Chr. G. (wasyl)


Bewertung
0 lesenswert
nicht lesenswert
Mampf F. schrieb:
> Poste mal die Initialisierung der GPIOs und der I2C Schnittstelle.
>
> Oft fehlen irgendwelche Alternate-Function-Mappings oder sowas ...

Hier meine I2C Init Funktion:
1
void MX_I2C1_Init(void)
2
{
3
4
  hi2c1.Instance = I2C1;
5
  hi2c1.Init.ClockSpeed = 40000;
6
  hi2c1.Init.DutyCycle = I2C_DUTYCYCLE_2;
7
  hi2c1.Init.OwnAddress1 = 0;
8
  hi2c1.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT;
9
  hi2c1.Init.DualAddressMode = I2C_DUALADDRESS_DISABLE;
10
  hi2c1.Init.OwnAddress2 = 0;
11
  hi2c1.Init.GeneralCallMode = I2C_GENERALCALL_DISABLE;
12
  hi2c1.Init.NoStretchMode = I2C_NOSTRETCH_DISABLE;
13
  if (HAL_I2C_Init(&hi2c1) != HAL_OK)
14
  {
15
    _Error_Handler(__FILE__, __LINE__);
16
  }
17
18
}

Und hier die GPIO Init Funktion:
1
void MX_GPIO_Init(void)
2
{
3
4
  GPIO_InitTypeDef GPIO_InitStruct;
5
6
  /* GPIO Ports Clock Enable */
7
  __HAL_RCC_GPIOA_CLK_ENABLE();
8
  __HAL_RCC_GPIOB_CLK_ENABLE();
9
10
  /*Configure GPIO pin : PA8 */
11
  GPIO_InitStruct.Pin = GPIO_PIN_8;
12
  GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
13
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
14
  HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
15
16
}

Ich habe schon entdeckt, dass die Portkonfiguration von I2C in einer 
anderen Funktion statt findet, und zwar in folgender:
1
void HAL_I2C_MspInit(I2C_HandleTypeDef* i2cHandle)
2
{
3
4
  GPIO_InitTypeDef GPIO_InitStruct;
5
  if(i2cHandle->Instance==I2C1)
6
  {
7
  /* USER CODE BEGIN I2C1_MspInit 0 */
8
9
  /* USER CODE END I2C1_MspInit 0 */
10
  
11
    /**I2C1 GPIO Configuration    
12
    PB8     ------> I2C1_SCL
13
    PB9     ------> I2C1_SDA 
14
    */
15
    GPIO_InitStruct.Pin = GPIO_PIN_8|GPIO_PIN_9;
16
    GPIO_InitStruct.Mode = GPIO_MODE_AF_OD;
17
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
18
    HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
19
20
    __HAL_AFIO_REMAP_I2C1_ENABLE();
21
22
    /* I2C1 clock enable */
23
    __HAL_RCC_I2C1_CLK_ENABLE();
24
25
    /* I2C1 interrupt Init */
26
    HAL_NVIC_SetPriority(I2C1_EV_IRQn, 0, 0);
27
    HAL_NVIC_EnableIRQ(I2C1_EV_IRQn);
28
    HAL_NVIC_SetPriority(I2C1_ER_IRQn, 0, 0);
29
    HAL_NVIC_EnableIRQ(I2C1_ER_IRQn);
30
  /* USER CODE BEGIN I2C1_MspInit 1 */
31
32
  /* USER CODE END I2C1_MspInit 1 */
33
  }
34
}

Nur weiß ich nicht, ob diese Funktion anderweitig schon aufgerufen wird, 
oder ob ich diese selber aufrufen muss. Deshalb hab ich eben versucht, 
diese aufzurufen, eine Änderung ist aber nicht fest zu stellen.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.