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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
0 p' P. @+ E! r" d$ Rmain文件:
/ `" {) G9 }$ ^; C. I6 h  F  ginterrupt void interrupt4(void)  ! ]# U+ h- W! U' s% E/ A- N
{3 h/ ?. v/ @% j9 a( v! F1 S
  Uint32 sample;
1 ?4 P9 U8 u8 v' P8 S7 ?, t2 H4 X3 \! P# p
  sample = input_sample(); // read L + R samples from ADC
8 A1 _$ z- W& A& k1 z  output_sample(sample);   // write L + R samples to DAC " Z8 G7 E$ X) ~1 f- i( U3 ]# R
  return;" B7 ^3 t& a$ j
}
5 a- {0 S  ?: M* z9 ?: d+ q3 x" l
int main( void )4 ]  s$ B* U! [. D) N6 X# x
{
4 K6 k* A0 w( T# a' ~$ k1 ]2 _) ?# c6 d: a+ Q! [
    /* Initialize BSL */
6 n( e* J$ y8 ]' T: ?3 }  E    EVMC6747_init( );
+ \" ]* r# K( E' O* j9 }/ |; I        /* Call evmc6747_intr function */
) p. m! y" y8 ]& |( l7 _. w    aic3106_init( );
$ X' x" Y4 `$ r) i6 Z* x1 }        while(1);* v$ k# D' P1 I9 _
}4 K* }9 n! J! _2 ?$ K# N; S! x
. a: G6 U& G0 p) x2 C2 H9 _8 ]" M

$ c9 P+ P- d2 E" I) U3 M: ~4 O6 u2 faic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
. h# B- d! ?& y0 B+ b$ ~( k: B/* Initialize MCASP1 */2 @0 f3 Y2 R" V0 y0 k
    mcasp = &MCASP_MODULE_1;
" ^5 r2 B' Z( d/ E) [! i8 `% L    mcasp->regs->GBLCTL  = 0;       // Reset
" F# Z' w) C4 D" {. a  o2 Y    mcasp->regs->RGBLCTL = 0;       // Reset RX
" V( s' }5 N7 l6 i    mcasp->regs->XGBLCTL = 0;       // Reset TX
9 }8 ~% Z3 b; x" I- m- ?; O    mcasp->regs->PWRDEMU = 1;       // Free-running: Y2 d, S# N9 Q4 D% B( Y* O
   // configure McASP0 receive registers. j* q+ z* j8 Q2 N6 }1 v7 k- K
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
8 m7 U% p4 W/ M' _( Y    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus. a( M" d$ g* R3 I( g1 T" y' a+ j
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word  F" f. G  ]1 ^
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)  h& S# @# I6 W1 h  Q" }. \
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
& }4 }6 R( ]" J# ]5 _( p# M    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
2 s/ i$ f7 `1 g5 _1 e+ \* v    mcasp->regs->RINTCTL    = 0x00000000; // Not used
7 n/ C3 G: H( ^! o( l2 t% f& d6 o    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
( u- m) k# l% {3 }( C' v( j
; x) P0 X- s: k& S' b+ ?; E* h    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
( K4 [8 ?! A( ]$ r" e    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus6 R3 k' }: v7 i" x, d
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
' P+ U; l3 ^" n, C' P# P* Q    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16. x+ @7 A0 l- y1 X1 a/ y
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK. V8 a0 v$ p$ ^6 Z  w5 Y
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1! V- b9 w2 X3 u+ d9 Y1 W
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
8 |7 f( i( X& }9 Z# [    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
( T8 _/ y" Q- L! ~; H5 w; a) J4 ^
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
( I, W) I1 e; S* L) |    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
. }) y) f1 X0 |6 @$ ]    mcasp->regs->PFUNC      = 0;          // All MCASPs
( k% b+ ]7 b6 g0 t+ r2 X: Q6 r$ w7 I    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
; f  a+ I: X8 {
! \7 c7 e+ _7 y' M6 i    mcasp->regs->DITCTL     = 0x00000000; // Not used% V0 ^" i2 L3 P* B+ a' x
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
9 V' B9 e1 A0 e6 K; h7 L    mcasp->regs->AMUTE      = 0x00000000; // Not used
8 w0 E1 ~: u0 \8 y1 l' {& \6 D! ?6 W: i3 C/ D  {4 m
/* Starting sections of the McASP*/
, u# Q3 B- i3 u( G! Q- L7 J1 c    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;   X  l/ R# ^0 Z" w7 o
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  0 K4 A$ N$ w* v% F$ f' G
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
% N& C1 k# V/ I. }    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );2 D4 G5 Z" M: H: j: R* o- z! O
. |( ]5 z( `7 A% Y# R( @8 w
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; : D8 \+ P( o' y+ A# Y: J0 b2 D0 {
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );6 Q& f! c% T1 z3 W1 x
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
" K5 ^3 {7 Y! L6 j' E/ h    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
7 s0 i! j# x. Y% h6 E/ S. [0 a/ w' I6 U/ x9 d$ a
    mcasp->regs->XSTAT = 0x0000ffff;
/ T. r6 d' p2 `5 m2 A& Z    mcasp->regs->RSTAT = 0x0000ffff; # ~- C) H) P) V' J
* b/ Y! q& U. R1 d* p
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;. E% I  Q' E: r
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
3 {+ j9 R* C. {  ]* F, G    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; # G  `" I; ?& }9 c% x+ ?5 |( B
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
3 b' n: U+ U: {6 j+ L% k* Q6 T5 }/ y# `& j2 i
    /* Write a 0, so that no underrun occurs after releasing the state machine */
) t+ }5 {: E2 ]: h7 I. p    mcasp->regs->XBUF5 = 0;
" W& K8 T0 ~5 A7 O' R% Y9 l    mcasp->regs->RBUF0 = 0;
$ N7 ?" H+ D% t/ q/ ~3 u$ I5 f  X6 Y; e% t
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; " D/ F" _- w% k. p) l; |
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
: n2 z0 L+ R+ C& |( Q    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
' i" y. w9 l( ?; A    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );& ~0 E( p& F7 m' P
4 Y2 m. M' q5 j. b" y7 {
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
( v. g  N2 N' F( k2 Z! T    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );0 q2 [4 K: A/ _, p" I
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; + l+ e, k( F1 x/ a: {2 `$ a! [& P, u4 k
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
" X4 g* {+ N& F3 [* m# b! W$ {6 C5 r- S8 ]
    CSR = 0x0000;
' Z. y) k% I" h+ G' {    INTC_INTMUX1 = 0x3d;
8 [1 @( a; I# F) Y4 \8 _    ISTP = (unsigned int)vectors;* z- m$ q- N' U- S7 L' W
    ICR = 0xFFF0;  
; R: H& F3 M: n) \& N    IER |= 0x12;  + p* {$ |. F- _& U$ S
    CSR |= 0x01;  
: o8 d8 e; w% J, Q# I. D; D; M" v* x1 V( u4 t
, U& V% |6 `$ m# o" Z, o

+ c2 S$ t' S0 Y* D. p% \还有就是两个输入输出函数:" O5 H; U4 V& w
void output_sample(Int32 out_data)$ o( ?# y5 r) `* W8 `/ s
{
9 b* _$ S: F4 P1 Z+ D  AIC31_data.uint = out_data;  . P6 y, T/ M& J; b+ j1 {
  MCASP1_XBUF5_32BIT = AIC31_data.uint;
' o/ K; n0 @9 d) Y0 O3 |8 Z}
( t/ F( ~- W7 t% R+ Z" w7 J* n1 \9 P1 ?6 u+ V1 K# R% G* p1 y
Int32 input_sample(void)" ]0 _' j6 `' ~, m5 u3 e$ P7 d  r
{  . I% t  F$ w/ _' r* e6 z
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
. O2 Q1 t9 b& _  return (AIC31_data.uint);% i' K# I3 x, Y4 H: f% t* |. P
}2 T- S' f4 O( Z0 a* o
; a: m5 u4 d! p+ b: u" `
分享到:  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-3-13 04:02 , Processed in 0.052218 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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