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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
! w) k0 W. l9 f- D2 d) bmain文件:
7 Q* w! i7 G4 ]" F- ?8 M" vinterrupt void interrupt4(void)  
& X! j: [$ H: p/ g, H! }  @{0 |% ]# B/ G( A% b/ J
  Uint32 sample;  u- F* {, v1 b8 @4 m

- k8 k& t; P8 v3 E  sample = input_sample(); // read L + R samples from ADC
+ Z8 p* j  @2 D0 P0 ^  output_sample(sample);   // write L + R samples to DAC
- t4 v5 r' ?6 @7 x2 I: B0 d  return;
& w7 k. F! G/ _8 p# E}6 O  Z% y' d$ W2 o" a1 d4 i

7 \; K4 w8 B; I. F$ e$ Aint main( void )
  Q8 T$ _  u! W3 s/ _6 k7 ~- l& X2 I* L{
0 _1 R5 L& i$ d( g) @
) _: J6 t7 H5 m) c8 p# U7 X    /* Initialize BSL */
7 ]! B/ D% V, R+ t6 {    EVMC6747_init( );
0 c+ s/ E* |" s8 H2 n/ _        /* Call evmc6747_intr function */1 b% p, o/ B" m. s1 y  y
    aic3106_init( );
! L% e! H" p0 q# u2 u$ K6 X% P        while(1);0 n# H2 _% ?, G' u! `
}+ t# U/ ^5 J$ r- E7 p' K
  p' q/ u2 g' `6 m2 ?+ K

5 f. n0 H; @+ ]+ h: t% Q8 Qaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题& A; C+ f  R1 Y$ \5 R# {
/* Initialize MCASP1 */
. d9 @, Z/ G5 K- T* J    mcasp = &MCASP_MODULE_1;
6 G, U$ c$ q# k# v* Z    mcasp->regs->GBLCTL  = 0;       // Reset
; k/ g' ~% A8 F4 D  q8 \5 c: [1 _    mcasp->regs->RGBLCTL = 0;       // Reset RX
0 q$ V2 u# R1 l$ C+ U. n) k    mcasp->regs->XGBLCTL = 0;       // Reset TX2 I. w" z8 z5 e: T8 L% U
    mcasp->regs->PWRDEMU = 1;       // Free-running
6 X5 |3 `% i8 n( }8 Y   // configure McASP0 receive registers$ J# g8 q" s. V! ?4 N- [
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used" s9 @% Z- X$ J7 e: y: i! x
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus6 o' o- W" f/ ?( }2 ~8 G
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word; F$ N* \+ C5 ?3 X1 K" Y+ R: o
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side); r8 e4 f7 V! t0 a7 ?' P6 a
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
2 A& d- _* C. l; O1 E( a    mcasp->regs->RTDM       = 0x00000003; // Slots 0,15 R. c' i& E0 A  }* q- {2 k' J8 x4 }
    mcasp->regs->RINTCTL    = 0x00000000; // Not used
( ~3 P3 y( b6 h8 B9 E    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
% h* E* E1 o+ W2 }! @/ q$ t# |5 g9 Q. ]7 s' c1 i7 w4 b( k& [* u
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used) y) F7 W8 a8 {& O. c
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
3 ~5 f) Q# `& {4 }& N' c    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word" y& c; {1 [! H/ V
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
4 j* b! D7 X- b6 t% r    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK+ y2 |' x  C. D2 N7 Z/ B, g  |* v7 @- J
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
) n6 _& \2 |/ e# Y& a; r( N$ G    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit+ ^5 B4 e$ T6 `& t! v
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256" G& y4 c) ?  j& v# a

4 s$ A; f$ r" Z+ i$ J    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN+ p+ c9 u, |: r( y- j
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
2 a2 n& _3 \6 p" {3 Q, `    mcasp->regs->PFUNC      = 0;          // All MCASPs
6 g+ H2 `6 a& g5 m7 z/ W8 @+ {+ [/ f    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
: T+ R3 o4 s- u
: {. g' r4 W# t$ s6 w    mcasp->regs->DITCTL     = 0x00000000; // Not used
4 o& S, C0 H% Y4 u0 U    mcasp->regs->DLBCTL     = 0x00000000; // Not used3 {9 A/ n5 b2 W2 V
    mcasp->regs->AMUTE      = 0x00000000; // Not used
9 D( j3 D, A& }# m$ Z9 b" u6 c7 X) _/ @# f( O0 K0 e/ Y& R# x0 C
/* Starting sections of the McASP*/5 D& e2 f' d7 X; V( ]
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
3 b$ ^; L, S) o9 @6 A( y" Q: L    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  2 y9 W5 B3 S# T5 F( O1 P! P. z
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 2 @2 s+ t4 P+ V
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
( C2 ~2 w' P9 y2 o/ U( p
& I7 }! }9 O6 [2 `* L    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; ; ~, h. \. i! Z% [
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );5 |2 ^1 E# U5 c
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 9 v9 s. Q" U0 Y1 l9 _) v4 ^
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );1 [: l  Z  d  A
6 p- h# B' B, k7 Z% v4 v" @
    mcasp->regs->XSTAT = 0x0000ffff; / k' U' c4 q) K5 M, Q
    mcasp->regs->RSTAT = 0x0000ffff; : Q1 C, [# A$ J; p+ }9 o5 `

3 X& X& e( B, L    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;9 C  K/ w0 [0 V
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );8 ~: g) _# ?8 _# ~* w
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; / l! W9 X& C, S" x- @$ r$ D* `
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
" F/ ?8 V' k! i9 \: a+ m
) `( \. N0 o$ C  e$ [0 l# O) ^; j    /* Write a 0, so that no underrun occurs after releasing the state machine */
; t: c! \  f) _$ B0 Y1 v* C$ S    mcasp->regs->XBUF5 = 0;
3 D! b& T" P6 P5 R% L7 w    mcasp->regs->RBUF0 = 0;
. L! R  ]8 \. ?4 e' j7 K* ?3 r9 v6 M8 q" Z& Z3 m- Q
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; . U( p: o+ v. I$ M9 x  N; N
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
- ?3 y3 z* U# ?' x3 y    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
/ I2 d. o, _. U4 e+ F  m    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
# P, Q! O9 d2 t* G6 Z& b& U" ?6 ]* B; Y% v' V) Y5 |
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
/ w  d; v2 q6 h* Y- S3 E  S    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );8 M4 v0 L( |2 [6 u, h& Y8 A( V
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
! N0 w* T" \- r; c+ Y  I1 @# Z& E5 z    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
' y, b' T" E7 {4 h$ w6 e. _% M/ e' K0 X/ y3 m; i! m1 h) ^
    CSR = 0x0000;
. n% |7 L0 o# L5 \    INTC_INTMUX1 = 0x3d;
! k! A4 O1 Z; n3 G    ISTP = (unsigned int)vectors;
  g* E5 _" J. Z- F9 G" R    ICR = 0xFFF0;  1 I& C% `" Y8 P+ f" X
    IER |= 0x12;  ( G# K9 D. {4 i- Z) b. R
    CSR |= 0x01;  - Y& R9 l/ S$ H% K/ l4 e

4 M3 Y/ d. M; o, H0 X/ p4 D# c& J7 S$ w# S, i
0 I0 `$ n% ]$ F$ A, P% A- F  e
还有就是两个输入输出函数:5 W& f2 l3 n1 B
void output_sample(Int32 out_data)
6 D6 I' n: g2 j) K" T# L{
3 y! \) d+ s- ]) x  AIC31_data.uint = out_data;  
. r" Q0 x4 n2 Q% h2 h  MCASP1_XBUF5_32BIT = AIC31_data.uint;$ w8 {- Q: C1 C* t( f; o5 `2 [7 e* Y) U
}& Y8 @5 Q# \" z& \8 \9 g0 e2 t, |
! w) r; O; [) x. N1 w
Int32 input_sample(void)& j( x' d' a7 }  H. i& Q+ o
{  
, v$ Z7 y5 h+ A8 q0 p: k8 H2 A5 Y6 g  AIC31_data.uint = MCASP1_RBUF0_32BIT;- @$ f  r1 F9 n$ ?  a
  return (AIC31_data.uint);
( a0 O  r: I$ I5 t, V/ F. I}
6 I6 e; J: ?) [+ Y9 v1 i  D! |  u( ]0 d9 {/ B( _
分享到:  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-1-31 10:23 , Processed in 0.040225 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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