C6747利用McASP发送中断方式完成音频输入信号的直接输出 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
0 k  C8 T0 q2 hmain文件:
$ q- G7 ^/ y) k0 a. E; x; minterrupt void interrupt4(void)  , ~8 ]! u) D8 ^+ r. T4 D: g
{
* S! u4 Q1 B9 G+ j3 K  Uint32 sample;
) r3 ^# ^- Z8 R- }  Q5 U8 q7 l) O: b0 q/ f; N
  sample = input_sample(); // read L + R samples from ADC
$ r2 I9 X" v$ ?9 T, k; R  output_sample(sample);   // write L + R samples to DAC # `. W4 \" h9 @$ f/ \7 J% d
  return;4 B- g& H  @7 ~0 f' Y" F
}
9 |% k' I2 ]; b( _4 i3 A4 F6 |7 a" A" L0 h& J  p, c4 j
int main( void )  I5 c1 ], x! \+ W) c8 h8 b
{
) B% D  H7 C9 ?1 h+ U7 M1 ^$ ^. @, X* b" S3 D$ `1 W, Y
    /* Initialize BSL */
/ U+ {$ |* b* g* f    EVMC6747_init( );+ W8 \  }+ Q# B) l, |
        /* Call evmc6747_intr function */
+ q% l) o0 S0 A    aic3106_init( );
% T; ~7 _# [5 V4 a, d3 |        while(1);+ b# S* C! \/ \7 _9 B* ?
}
# u1 f9 g' D! \8 H# ]/ r
3 P' N/ _! b1 ]! |+ L6 v
! b' n8 N0 [4 V0 C" L8 Saic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题; @- N% Z, K# [
/* Initialize MCASP1 */# S1 j6 w) B8 f- c  C
    mcasp = &MCASP_MODULE_1;
6 Q7 i4 _9 s: f    mcasp->regs->GBLCTL  = 0;       // Reset
4 F% ~& W# \$ i/ q7 x: [" r9 j    mcasp->regs->RGBLCTL = 0;       // Reset RX
) N  ?% w$ M. A3 Y% `- t1 I1 K% |- b    mcasp->regs->XGBLCTL = 0;       // Reset TX
  e9 q( i4 m8 f. O    mcasp->regs->PWRDEMU = 1;       // Free-running
0 P( z6 ?: G- L, t* [3 a. [( @   // configure McASP0 receive registers  A3 F" E1 z7 U( Y7 N( V8 B
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
/ {# o; m8 r" t& }    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
  A# t* M  T$ f$ m+ y    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word! J( G5 [; N, ^. G: O: G: J$ k
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
" c6 O5 J& ]+ W! K+ q3 ]! F7 N3 P    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)0 y6 V+ s1 Q0 k" f' `4 S
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1# i; ~9 ?6 }& C# K9 S+ D  {3 N
    mcasp->regs->RINTCTL    = 0x00000000; // Not used
9 D# J6 Z3 W; \5 w0 I    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
* i/ J6 N  j1 m. \. F2 [  O" g) D6 T3 j+ y  P
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
# r) |+ _) {8 l7 y1 i    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
; k# c2 r. T7 S& [! M% E    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
# f  e( Y( H0 _% n    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
' Z* M8 Z% P% ^6 R9 H/ v5 a    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
& R5 i7 q+ W. o+ A# w7 |    mcasp->regs->XTDM       = 0x00000003; // Slots 0,14 S* ]9 {2 r1 z1 w  B' T, L
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
+ F4 K3 r2 w7 v- V9 \    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
6 w: U4 {% S$ c6 N* i
$ M- K4 j/ l- g    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN% I( ]9 K8 Z! \% O0 f* k! D+ u
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT) J* Y! Y: Z! a6 k2 j) _8 ]
    mcasp->regs->PFUNC      = 0;          // All MCASPs
# v+ U5 [% w) N6 P8 d, z    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX16 f1 B7 g9 E6 z; `

) Q$ J2 B7 {$ F( c5 P% B+ P    mcasp->regs->DITCTL     = 0x00000000; // Not used( B, v( p/ _  ~( K) h# @
    mcasp->regs->DLBCTL     = 0x00000000; // Not used& C8 |; |) m% k! K
    mcasp->regs->AMUTE      = 0x00000000; // Not used
+ K: J! p! ~! D# y  f' y3 V" i. f4 w8 a2 f/ `: C' V  t# E" j: @
/* Starting sections of the McASP*/7 T% T# q- D# D5 c3 Q
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
  ^( n$ R2 W+ a0 Z  |& U    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
( h) n  Z0 U9 \3 W8 l    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; & x2 z$ n! u5 Z$ F0 y
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
, s2 t) _7 B, A# {) T
+ M1 G8 f! X0 X- r8 t. j  t4 j4 T" ~    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; ; \& P' |* E- }# T
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );3 w! u& v0 b- Z& `& o+ c" Y
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
2 w* V1 c5 Z4 P6 m# U! _: W2 M    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
8 D- Z- F3 ~" T: l" M1 `
8 |( e/ c$ |. V. g6 x    mcasp->regs->XSTAT = 0x0000ffff; / w( ~9 N4 K5 `: E  ?
    mcasp->regs->RSTAT = 0x0000ffff;
* r4 j4 F  l5 y
. ?! p1 Q) }8 G    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;; k. {* I9 s" N2 r6 [! N3 g
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
  S" ]$ J5 U* w- C0 s2 s    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 5 `  S* i3 @5 u  R/ z
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
- ~( J: v: ~: B, d$ c) h- W$ E1 X3 y2 b
    /* Write a 0, so that no underrun occurs after releasing the state machine */
9 ?8 }; S+ Q% n- Q3 I    mcasp->regs->XBUF5 = 0;: h* S5 ]6 y1 y- e  v: T
    mcasp->regs->RBUF0 = 0;7 e0 \, Z0 H+ J

$ [" H5 ?( n; t8 W# V. o    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; ) H  _% j4 S$ O1 L! A" {
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );) {/ o6 y* G# Q4 M
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
/ @7 R- u, {" M/ p, I    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );: K$ H/ q4 v5 L8 K1 k

7 t8 k! s4 |; ]    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
6 ?+ q5 p5 S6 S' ^: T: T* ^* q    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
! F' x9 h9 d& ^( n# c7 q5 p    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 7 I4 \; X7 |) [, c
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
# V+ e9 T; b5 A! h; S) I% \( r/ ?0 ^% r! c! f* u+ ~, i
    CSR = 0x0000;
( P4 D* d7 ?4 A    INTC_INTMUX1 = 0x3d;- H6 Z" P0 W: m: x" p
    ISTP = (unsigned int)vectors;* U0 j3 `% X2 ~* b6 J
    ICR = 0xFFF0;  . ~  s# t& T4 _& L" W' k: g
    IER |= 0x12;  ; i7 o# C* |3 m" p9 V" |7 |
    CSR |= 0x01;  
- ]( z- ^9 Q; |4 q9 z7 g5 C4 _: d, W: U) F9 W

. }! v& Z6 y' C' e! q' G! ?4 Y, \8 i# x! ?, c' P
还有就是两个输入输出函数:. g' m( n: Z6 P+ D
void output_sample(Int32 out_data)
( r, C$ C1 u7 T' O% G9 n{' P$ K: l' n/ D3 W  Y6 ?$ W0 p/ }
  AIC31_data.uint = out_data;  
8 r8 U7 U% _0 O  MCASP1_XBUF5_32BIT = AIC31_data.uint;
' V' ]9 p0 I8 f/ X0 ]; W& u}
3 h: J9 Y' b/ G8 A9 D$ m8 Q' V; N  u+ |" m9 {2 H: X- r9 D+ ^
Int32 input_sample(void)" e" V, h8 S5 @# B
{  ( T5 z1 T  W8 s' r  ~/ z
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
4 D9 [- ?* K/ r0 R* U  return (AIC31_data.uint);) u+ l0 R: i! q
}
. A( _" B& c4 J/ {7 V+ m) \  t* G# b, B5 O" V
分享到:  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, 2025-12-6 16:17 , Processed in 0.038619 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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