📄 record3.s
字号:
movi DcacheBase,APP_DATA_SEG
dlw r2,r2_temp
dlw r3,r3_temp
dlw r4,r4_temp
dlw r5,r5_temp
dlw r7,r7_temp
dlw r8,r8_temp
dlw r9,r9_temp
dlw r10,r10_temp
dlw r0,BlockSize_temp
nop
mov BlockSize,r0
dlw r0,BlockSkip_temp
nop
mov BlockSkip,r0
dlw r0,DMASize_temp
nop
mov DMASize,r0
dlw r0,r0_temp // restore the register
dlw r1,r1_temp
mov DcacheBase,r24
nop
j r11
nop
nop
//----------------------------------------------------------------------------
//-------------- End of record programm -------------------------------------
//----------------------------------------------------------------------------
//****************************************************************************
//----------------------------------------------------------------------------
//***************** next for real record sub programm ************************
//----------------------------------------------------------------------------
//****************************************************************************
real_record:
//----------------------------------------------------------------------------
//****************************************************************************
//----------------------------------------------------------------------------
movi DcacheBase,APP_DATA_SEG
dlw r0,record_on_off_flag // here we need check the play back flag ??????
nop
andi r0,0xffff
tsti r0,0xaaaa
bne record_over // test if now in record mode
//---------------------------------------------------------------------------
dlw r0,recording_flag
nop
andi r0,0xffff
tsti r0,0xaaaa
beq now_recording
li r0,buffer_first_page_head
dsw r0,record_fifo_start_address // here for record use
dsw r0,record_fifo_current_address // here for record use
li r0,buffer_third_page_tail
dsw r0,record_fifo_end_address // care for do it
//--------------------------------------------------------------------------
//--------------------------- debug use ------------------------------------
// mupi r0,REC_SEG
// ori r0,24*4 // for debug only
// dsw r0,record_fifo_end_address // care for do it // use 8 frames
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
movi r0,544
dsh r0,y0 // initial y0
movi r0,0
dsh r0,se // initial se
la r1,(sl)
loop 35,initial_vary
dswr r0,r1 // all 35 variable need to clear
addi r1,4
initial_vary:
movi r0,0
dsw r0,frame_count // initial the frame count
movi r0,0xaaaa
dsw r0,recording_flag // set the flag
//-------------------------------------------------------------------------
// next for check the system time
//-------------------------------------------------------------------------
#if 1
// li r0,sync_info
// shr r1,r0,16
// andi r1,0xffff
// mov DcacheBase,r1 // set the dcachebase
// movi r2,0 // clear the buffer
// andi r0,0xffff
// dlwr r3,r0 // pick the hour
// rlwi r3,(0x750>>2) // read video PTS
rlwi r3,STC
nop
nop
dsw r3,system_time // if now (pick the record time for play use )
movi r0,0 // in play don't need to check
dsw r0,system_time_buffer // clear the playing flag
#endif
//--------------------------------------------------------------------------
//--------------------------------------------------------------------------
now_recording:
//--------------------------------------------------------------------------
//**************************************************************************
//--------------------------------------------------------------------------
//--------------------------------------------------------------------------
// ************ next for check address ************************************
//--------------------------------------------------------------------------
dlw r0,record_fifo_current_address
dlw r1,record_fifo_end_address
dlw r2,frame_count
tst r0,r1
bgte record_over
#if !LINEAR_BUFFER
li r1,buffer_first_page_tail
tst r0,r1
bne check_address_next1
li r0,buffer_second_page_head
dsw r0,record_fifo_current_address // skip the used zone
j check_address_end
check_address_next1:
li r1,buffer_second_page_tail
tst r0,r1
bne check_address_end // skip the used zone
li r0,buffer_third_page_head
dsw r0,record_fifo_current_address
#endif
check_address_end:
j recording_next
//-------------------------------------------------------------------------
// **************** end of check address **********************************
//-------------------------------------------------------------------------
//----------------------------------------------------------------------
//----------------------------------------------------------------------
record_over: // address overflow
movi r0,0
dsw r0,record_on_off_flag // clear the flag forbidden re-in
dsw r0,recording_flag
j real_record_end
//----------------------------------------------------------------------
//----------------------------------------------------------------------
recording_next:
nop
jsr r6,adpcm_record
//----------------------------------------------------------------------
nop
real_record_end:
nop
j r9 // return to call programm
nop
//****************************************************************************
//---------------------------------------------------------------------------------
//-------------- end of real record sub programm -----------------------------
//----------------------------------------------------------------------------
//****************************************************************************
//----------------------------------------------------------------------------
//-------------- next for adpcm record ---------------------------------------
//----------------------------------------------------------------------------
adpcm_record:
#if 1
movi StartAddrHigh, APP_DATA_SEG
la r1, (mic_data_buffer)
la r0, (local_micro_44)
shr r0, 2
shr r1, 2
movi DMASize,31
movi BlockSize,31 //0 // transfer 256*4 byte to main memory
movi BlockSkip,0
loop 8, pick_local_buffer
mov LocalAddr, r0
dmawr r1
pick_local_wait:
bdb pick_local_wait
addi r0, 32
addi r1, 32 // protect the local memory now used in mic ( 1300H - 1700H )
pick_local_buffer:
addi r2,1
dsw r2,frame_count // frame increase 1
//-----------------------------------------------------------------------
// load debug data
//-----------------------------------------------------------------------
#if !CLASSIC_METHOD
//-----------------------------------------------------------------------------------------------
// *************** next for use filter method to do down sample *******************************
//-----------------------------------------------------------------------------------------------
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
//******************** next for sample rate change ************************
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
//---------------- use filter method ---------------------------------------
//--------------------------------------------------------------------------
movi AGRAdr0, input_data_address // from 0x1c00
movi AGRInc0, 0x2
movi AGRSiz0, 0xffff // for microphone data now in
movi AGRAdr1, input_data_address
movi AGRInc1, 0x2
movi AGRSiz1, 0xffff // change from two channel to one channel
li r0,0x00400000
loop 0, mix_two_channel_micro_data
mulhf r2, r0, i0 //
maddhf r2, r0, i0 //
nop
rndhf i1, r2 //
mix_two_channel_micro_data:
nop
nop
//-------------------------------------------------------------------------
// **************** --------------------------------- *********************
//-------------------------------------------------------------------------
movi AGRAdr0, input_data_address+512
movi AGRAdr1, input_data_address+512+64
loop 256, move_local_buffer
movhf r0,a0(-2) // for history data use
movhf a1(-2),r0
move_local_buffer:
nop
nop // move the buffer for filter use
//------------------------------------------------------------------------
//************************************************************************
//------------------------------------------------------------------------
movi StartAddrHigh, APP_DATA_SEG
movi DMASize, 15
movi r0,down_sample_filter_history_data
shr r0,2
movi r1, input_data_address
shr r1, 2
mov LocalAddr,r1
dmarr r0
WaitDma
//-------------------------------------------------------------------------
//*************************************************************************
//-------------------------------------------------------------------------
movi StartAddrHigh, APP_DATA_SEG
movi DMASize, 15
movi r0,rec_filter_coeff
shr r0,2
movi r1, input_data_address + 512+64
shr r1, 2
mov LocalAddr,r1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -