C6747利用McASP发送中断方式完成音频输入信号的直接输出 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站
点击跳转“创龙科技服务通”

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 6390|回复: 1
打印 上一主题 下一主题

C6747利用McASP发送中断方式完成音频输入信号的直接输出

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
8 n; K0 l# b0 Y' M- {$ W$ imain文件:: B# l( }" X: |1 `$ d  }
interrupt void interrupt4(void)  3 O. j7 f  [* J7 ]" B! @! O2 G7 O
{
' H3 F2 R2 l( P0 Z% E% m  Uint32 sample;
. R" D$ W2 _; E9 c4 s
$ O9 z# B3 m! c+ ^5 T  sample = input_sample(); // read L + R samples from ADC) P7 p2 o' j% O  A) e6 h/ m
  output_sample(sample);   // write L + R samples to DAC ( ^' g7 e1 c( a& u+ U
  return;# r% k  z+ x0 w* _
}2 ^9 E8 i1 d& j; k, M! E! f
' Z& Q2 f% o. V' h6 N5 c" G" s
int main( void )
5 R( e$ z- C& V8 E2 ^7 Z% z{
- n. d! V4 I5 K5 g
3 ^' @+ N' e0 {0 V$ f* v  H2 R$ J    /* Initialize BSL */
" G% V5 g' m8 C" M, {0 K8 d8 g    EVMC6747_init( );. b& Z' o" F0 y- E0 ?) i6 v5 F
        /* Call evmc6747_intr function */* T* p, A0 I4 t* J4 m
    aic3106_init( );0 D* ]* N0 N& l% Z8 I# A
        while(1);
) n: y9 ?+ K5 ?- Z}
7 z# U+ y, q% q3 I% Q7 E: k5 d
/ |+ _# I( {0 g6 o5 y
3 [5 F; K: |; [4 y+ E8 gaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
9 O. A; S" G% p% T' ^/* Initialize MCASP1 */% q' a' ~5 p4 W: X
    mcasp = &MCASP_MODULE_1;
9 X" y. `7 S) r( L0 u    mcasp->regs->GBLCTL  = 0;       // Reset
3 D( X2 C+ Z0 R    mcasp->regs->RGBLCTL = 0;       // Reset RX
, {5 [% a- |9 I; u    mcasp->regs->XGBLCTL = 0;       // Reset TX/ B8 Y$ Y" l( L  y7 d9 j0 D3 s
    mcasp->regs->PWRDEMU = 1;       // Free-running! Y+ A. U4 O$ j: |
   // configure McASP0 receive registers
4 F7 p; V) I. C    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used* f' G$ \# D1 B) c% R
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus9 G. |" R1 x& @/ T, s5 F! I7 [  |
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
" c- w6 Q0 c  j" U4 d( |9 ]. [+ |' b    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
+ E) `' m9 _. k3 G3 f$ Y+ H; U    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)+ o" ^  q2 }" M; h, x" j, S
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,10 h0 B) A9 I/ T/ {
    mcasp->regs->RINTCTL    = 0x00000000; // Not used
- e- q2 P/ X! |2 L8 X- v- o    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2567 F( D4 a" _$ ~
8 p3 D* B8 P+ s  Q1 C; a% F) _" I
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used' H1 Q  M% b6 k4 a8 a6 @
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
5 [) S7 I, T% W3 W    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word* R7 V6 u$ H- x7 K4 G( w& ~
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16: Q* O! \8 a3 n1 m3 {8 [$ P
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
! \1 C& G. w1 d" S# g8 a8 B    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1& n9 _. x1 ?; d
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
8 P/ b) v, _/ U. K    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2561 ^$ @; ^4 g/ W* r; T

, b. \* K' h* W; [+ _, u/ T7 t    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
: i9 N/ J& ^) w3 u: d    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
' S$ F6 j% M# c    mcasp->regs->PFUNC      = 0;          // All MCASPs
9 _, `$ h7 F* L& m+ R    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1' u8 S$ `4 \9 V8 s0 B
" G) |5 I( R* [
    mcasp->regs->DITCTL     = 0x00000000; // Not used
" z" X# u( z# C+ |2 l! z, l    mcasp->regs->DLBCTL     = 0x00000000; // Not used. {' o3 i5 o+ X' t7 g; y+ J7 E; G
    mcasp->regs->AMUTE      = 0x00000000; // Not used
, M9 K, Q6 t7 |$ W: |4 G6 K5 S6 B' o  u/ z6 K% w* z
/* Starting sections of the McASP*// {; U8 N( |& h, [
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
! h4 c# \4 G3 |0 y# }    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  8 j7 M8 ]2 O1 V* ]) n' b+ ]! x
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
6 p0 ~2 c. A  Y( E( U% `8 \    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
" x  m5 a$ I& x( y9 H) Q9 t- G5 Y
7 F( X" K9 K4 K) R    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
9 Q9 i; v% S5 l5 l    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );5 A8 H9 \9 R" M0 r
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 6 V3 p- y2 S# ]1 o2 Y! b* Q, Z
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
0 Q( L* `8 w' W  r% P6 `
/ J+ D3 u; ~! Z, _. R    mcasp->regs->XSTAT = 0x0000ffff; 3 ]- b" y, D: Q  V8 j* g$ n2 t7 ~
    mcasp->regs->RSTAT = 0x0000ffff; ; W+ o. }2 h3 Y4 w5 Y9 M8 }
) m1 o. {- U2 s) h0 u
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
- |! C. b( y, v) H8 e1 `) L, I; d    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );$ E% Y: y4 c( t; z$ V/ k
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
* P& F7 U3 f$ k7 r9 Y    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
( R+ s; f! y! B/ K( \. s) D  k# I% q- x* w) W: }  x/ W
    /* Write a 0, so that no underrun occurs after releasing the state machine */
2 Y+ ?7 J. t! |$ I4 ~    mcasp->regs->XBUF5 = 0;
; K7 d7 S& ^- `    mcasp->regs->RBUF0 = 0;
  f9 g4 {& K/ F& }: c2 _, `4 ^) Y
2 [# Z+ Z9 o0 g2 `, ?! p3 ]    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 2 t0 C( V1 O' T) {
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
' S& i6 X/ e4 D4 M, E& r* l$ Q" X    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
0 A$ M" J/ W3 n+ r) }    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
4 M, _9 i1 T0 a4 {' b" `+ m& X* g% r  e- W& ?. @
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
; v8 K1 ?& o& d" A4 a: e    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );9 {; \5 x4 b( E$ I& a2 P' ^
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; $ H; Y9 G  X5 q% x
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );) q1 T- u4 G. b- ^! w

: f/ j/ c3 B( V0 ]    CSR = 0x0000;
" u: `+ F+ l6 O& a% S* ]    INTC_INTMUX1 = 0x3d;
- S" Y* u- g$ t    ISTP = (unsigned int)vectors;
1 `2 ?' Y5 b; X' X* b; F0 `1 D: W) _    ICR = 0xFFF0;  0 j/ P9 f3 K, \$ s
    IER |= 0x12;  
/ U/ Q: H9 z( |  g    CSR |= 0x01;  - i0 [; f" G) {6 s% L

5 T3 `+ }2 {2 i: W& C3 x# ^
, C0 N5 V& n% _- |5 `
0 ?8 E0 B3 o5 m$ |, v" e5 k还有就是两个输入输出函数:
, Y  S( z" V& J# r' Pvoid output_sample(Int32 out_data)
; q% ~7 z2 I+ O, ~' ~0 K4 T6 I{0 l  ?# y! u8 ?8 h4 F- E
  AIC31_data.uint = out_data;  
. I6 P" z0 f% e# M2 k  MCASP1_XBUF5_32BIT = AIC31_data.uint;- ?+ @3 y7 D5 z* s! B: k1 H
}) G8 ~* r! h: D6 {& ?+ o
* `- ~7 d- ^# M" z( e
Int32 input_sample(void)) z3 j/ p+ c2 {" A! ^2 ]4 L# C
{  
* U9 C6 u- u0 P- p  AIC31_data.uint = MCASP1_RBUF0_32BIT;
( ?/ x3 m$ K' ~) m9 z* [  return (AIC31_data.uint);! ^" _6 s" Z1 V5 n( z8 f" N7 Z7 {
}
" c- O# p* k6 `, ^) J. s0 H3 p+ W* K, n* O! T, f+ \
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

3

主题

852

帖子

3538

积分

创龙

Rank: 8Rank: 8

积分
3538
沙发
发表于 2016-3-16 11:55:59 | 只看该作者
可以参看创龙提供的例程:AUDIO_LINE_OUT_INTR——Line Out 音频输出(中断方式)
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

点击跳转“创龙科技服务通”

QQ|手机版|小黑屋|嵌入式开发者社区 ( 粤ICP备15055271号

GMT+8, 2026-2-22 15:19 , Processed in 0.040300 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

快速回复 返回顶部 返回列表