2.21.2008

MAX9850 Register : 0x05 ENABLE

0x05 (Enable Register)內含各function的enable bit:
  • bit 7 : ~ SHDN : shutdown 整個codec
  • bit 6 : MCLKEN : DAC需要外部MCLK,但是 LineIn/Out 和Headphone部份則不需要
  • bit 5.4 : CPEN : Charge Pump Enable : 讓LineOut , Headphone的Charge Pump功能enable起來
  • bit 3 : HPEN : Enable Headphone output (有一句 "The Line Output must be enabled for the headphone amplifiers to operate properly",是說 enable headphone時,lineout也要enable才行嗎?)
  • bit 2 : LNOEN : Enable LineOut (回應上一個問題:Yes)
  • bit 1 : LNIEN : Enable LineIn
  • bit 0 : DAC : Enable DAC.
所以比較要注意的就是headphone和Lineout之間的關係,headphone依賴Lineout。
所以如果有人設計 Lineout 直接以固定AMP gain 推speaker,則插入headphone時,speaker無法關閉。

這也就表示 MAX9850不支援Lineout直接接speaker (所以lineout沒有獨立gain control ?)。

所以LNOEN 一值要是1就是了

程式設計上,雖然用read-modify-write比較好(減少相依)。但是由於read-write之間形成一個critical section,然後I2C I/O部份又是一個critical section。

CE的critical section又有點像 mutex,不是完全的disable context switch,所以這樣作有機會會造成dead-lock (還有內建priority-inversion?)

所以有點危險。只好每一個function用一個variable來代表狀態,每次write時依照variable重新算出數值。

需要的variable有
  • headphonein
  • lineinopen
其他的部份:LNOEN一直要是enable。 lineinopen的話,DAC就要disable。

沒有留言: